具有多个构造函数选项的Pyjnius Autoclass

2024-09-30 02:26:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在一个Kivy应用程序中使用Stripe payments Android SDK和pyjnius。尝试初始化时卡.java来自https://github.com/stripe/stripe-android/blob/v2.1.0/stripe/src/main/java/com/stripe/android/model/Card.java 我有个错误'jnius.jnius.JavaException:没有与参数匹配的构造函数“我认为这与卡.java有多个构造函数选项。下面是我的代码。(卡上崩溃=卡(cardNum,expMon,expYear,cvc))

from jnius import autoclass,PythonJavaClass,cast,java_method

Stripe = autoclass('com.stripe.android.Stripe')
Card  = autoclass('com.stripe.android.model.Card')
Token  = autoclass('com.stripe.android.model.Token')
TokenCallback = autoclass('com.stripe.android.TokenCallback')

class StripeTokenCallback(PythonJavaClass):
    __javainterfaces__ = ('com.stripe.android.TokenCallback',)

    @java_method('([Lcom.stripe.android.model.Token;)V')
    def onSuccess(self,token):
        print 'printing token debug'
        print token
        Cipher = AESCipher.AESCipher(_key)
        msg = '{"client_nonce:"' + token + '"}'
        print msg
        encMsg = Cipher.encrypt(msg)
        rsp = connectToServer(_host, _port, encMsg)
        decRsp = Cipher.decrypt(rsp)
        pass

    @java_method('[Ljava.lang.Exception;)V')
    def onError(self,error):
        print 'Error - Debug'
        print error
        pass

class StripeToken():
    def __init__(self):
        pass

    def genToken(self,token,cardNum,expMon,expYear,cvc):
        card = Card(cardNum,expMon,expYear,cvc)
        if not card.validateCard():
            print 'Card Not Valid'
            return False
        stripe = Stripe("pk_test_6pRNASCoBOKtIshFeQd4XMUh")
        token_cb = StripeTokenCallback()
        stripe.createToken(card,token_cb)

Tags: selfcomtokenmodeldefjavacardstripe
1条回答
网友
1楼 · 发布于 2024-09-30 02:26:28

通过将输入变量转换为字符串和整数修复

from jnius import autoclass,PythonJavaClass,cast,java_method

Integer = autoclass('java.lang.Integer')
String  = autoclass('java.lang.String')

Stripe = autoclass('com.stripe.android.Stripe')
Card  = autoclass('com.stripe.android.model.Card')
Token  = autoclass('com.stripe.android.model.Token')
TokenCallback = autoclass('com.stripe.android.TokenCallback')

class StripeTokenCallback(PythonJavaClass):
    __javainterfaces__ = ('com.stripe.android.TokenCallback',)

    @java_method('([Lcom.stripe.android.model.Token;)V')
    def onSuccess(self,token):
        print 'printing token debug'
        print token
        Cipher = AESCipher.AESCipher(_key)
        msg = '{"client_nonce:"' + token + '"}'
        print msg
        encMsg = Cipher.encrypt(msg)
        rsp = connectToServer(_host, _port, encMsg)
        decRsp = Cipher.decrypt(rsp)
        pass

    @java_method('[Ljava.lang.Exception;)V')
    def onError(self,error):
        print 'Error - Debug'
        print error
        pass

def genToken(token,cardNum,expMon,expYear,cvc):
    jcardNum = cast('java.lang.String', String(cardNum))
    jexpMon = cast('java.lang.Integer', Integer(expMon))
    jexpYear = cast('java.lang.Integer', Integer(expYear))
    jcvc = cast('java.lang.String', String(cvc))
    card = Card(jcardNum,jexpMon,jexpYear,jcvc)
    if not card.validateCard():
        print 'Card Not Valid'
        return False
    stripe = Stripe("pk_test_6pRNASCoBOKtIshFeQd4XMUh")
    token_cb = StripeTokenCallback()
    stripe.createToken(card,token_cb)

相关问题 更多 >

    热门问题