这两天需要写一个python程序调用支付宝的API,目前支付宝没有提供python的API所以这边用了JAVA的API。
然后就是调用接口进行连接
self.alipayClient = DefaultAlipayClient(GATEWAY_URL, APP_ID, PRIVATE_KEY, "json", "GBK", ALIPAY_PUBLIC_KEY, "RSA2");
此处的PRIVATE_KEY是应用私钥,调用JAVA的库当然要用JAVA的应用公钥。如果用非Java的公钥就会报以下错误:jpype._jexception.AlipayApiExceptionPyRaisable: com.alipay.api.AlipayApiException: RSAcontent = alipay_sdk=alipay-sdk-java-3.0.52.ALL&app_id=2018010801362217&biz_content={"page_size": 1}&charset=GBK&format=json&method=ant.merchant.expand.assetproduce.assign.query&sign_type=RSA2×tamp=2018-06-07 11:48:49&version=1.0; charset = GBK
当然如果你直接使用Java的应用公钥也会报错:
jpype._jexception.NoClassDefFoundErrorPyRaisable:java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
和jpype._jexception.NoClassDefFoundErrorPyRaisable: java.lang.NoClassDefFoundError: Could not initialize class com.alipay.api.internal.util.AlipayLogger
这是因为这个java虚拟机没有找到你的这个commons-logging.jar 这个jar包,无法执行AlipayLogger这个类。你需要把jar导进去
jarpath=os.path.join(os.path.abspath('.'),"alipay-sdk-java-3.0.52.ALL.jar")
jarpath2=os.path.join(os.path.abspath('.'),"fastjson-1.2.47.jar")
jarpath3=os.path.join(os.path.abspath('.'),"commons-logging-1.1.1.jar")
jpype.startJVM(getDefaultJVMPath(),"-ea","-Djava.class.path=%s;%s;%s"%(jarpath,jarpath2,jarpath3))
这样就可以运行了,