hybaym 2017-12-07
在app开发过程中,关于支付宝模块apiPayPlus你有没有遇到过这样的问题:微信支付可以轻松通过,支付宝支付会出现闪退的问题(错误代码:ALI40247)。
或许,你绞尽脑汁想出了解决方案,但从来没写过开发心得,不能供其他开发小伙们学习参考。也或许,你身心正在被这个问题折磨着。今天,柚子君给大家转载一位优秀开发者的成功经验,希望能帮助到大家。
关于支付宝模块apiPayPlus的使用成功经验分享
1、支付宝这边必须签约成功,这是必须的。
在开发者中心查看自己的应用,是否已经成功上线。
2、查看这里的app支付是否已经生效
这里是很重要的一步。因为开发者用的是aliPayPlus的第二种支付方式,不知道是用RSA2还是RAS1,所以两处都设置成一样。这个地方需要下载支付宝提供的密钥生成工具来生成。
密钥格式选择pkcs8,密钥长度为1024或者2048,这个不影响。
然后把商户应用公钥填写到支付宝官网开发者中心的接口加签方式里面,这样支付宝服务器端就配置完成。
3、接下来就是做app客户端的相关配置
1、根据教程,配置config.xml和key.xml这两个配置在官方文档已经明细说明,不再过多细述。
2、支付代码:
varaliPayPlus=api.require('aliPayPlus');
aliPayPlus.config({
appId:'',
rsaPriKey:'',
},function(ret,err){
if(ret.status==true){
aliPayPlus.pay({
subject:'货物运输款',
body:'货物运输款',
amount:alimoney,
tradeNO:paytradeNo
},function(ret,err){
if(ret.code==9000){
api.toast({
msg:'支付成功'
});
paylog(1);
}else{
if(ret.code==6001){
api.toast({
msg:'支付已取消'
});
}else{
alert('支付失败code:'+err.code);
}
}
});
}
});
特别说明:不用aliPayPlus.config好像有问题。所以开发者微信和支付宝都用这个config方法。到这里,完美实现支付。
结论:公钥和私钥的问题
另,由于开发者开发的软件,不只是APP端能支付,必须电脑端(客户网站)也要能支付。所以问题又来了:由于开发者用的是.net开发,所以PC端私钥就不能采用pkcs8,而是用非pkcs8来生成密钥对。经过测试,APP端使用的是RSA的密钥对。那么网站集成就用RSA2。这样网站和手机支付都通过了。
注意这里,rsa2是网站使用的非pkcs8密钥,RSA是手机使用的pkcs8密钥。
新版的支付宝.net是没有demo包,只能下载sdk,把sdk集成到自己的网站。采用官方提供的请求示例就可以实现网站支付了。多看看支付宝的文档亲们。
另外,支付宝这边有技术员可以在线帮助,如果真的过不去就在线请求帮助。不然你搞到天黑都不一定实现。
另外,这里也提供微信的第二种支付方案的代码:
//微信支付======第二种方案
functionwxpay(){
varwxPay=api.require('wxPay');
wxPay.config({
apiKey:'',
mchId:'',
partnerKey:'',
notifyUrl:''
},function(ret,err){
//coding...
if(ret.status){
//alert('配置商户支付参数成功');
//alert('对接支付接口成功,即将跳转支付界面。');
wxPay.pay({
description:'货物运输款',//商品或支付订单简要描述
totalFee:smoney,//订单总金额,只能为整数,单位:分(¥)
tradeNo:paytradeNo
},function(ret,err){
if(ret.status){
paylog(2);
}else{
//alert(err.code);
//错误码:
//-2(用户取消)
//-1(可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等)
//1(必传参数缺失)
if(err.code==-2){
alert("已经取消支付");
}
if(err.code==-1){
alert("未知错误");
}
if(err.code==1){
alert("必传参数缺失");
}
}
});
}else{
//alert(err.code);
alert("对接支付接口失败");
}
});
}