支付宝集成

来源:互联网 发布:做优化发展环境维护人 编辑:程序博客网 时间:2024/04/28 13:15


近来处理了几个app应用的支付宝集成,对其中的一些问题有了些了解,汇总一下,以备自己或者其他人参考。

1、订单签名错误,请检查PARTNER对应的密钥是否正确

这个问题网上很多人问,但千篇一律都是没有给出解决办法的。很不幸的,我也碰到了。一开始以为是自己密钥生成有问题,对着支付宝的开发文档,重复生成密钥,每步都严格按照要求,结果还是无法解决。几近崩溃!后来没办法了,问了支付宝集成开发的技术支持,原来这个不是密钥的问题,而是没有申请到对应的接口。app应用内支付,要开通的产品是:安全支付,版本不知道它是怎样区分的,我v1.1和v2.0我都见过,如果开通了这个接口,那这个问题就马上解决了(前提是你的密钥生成不能有问题)。

2、服务器端验签不成功

这个问题大多是因为支付宝公钥生成不正确。很奇怪的是,支付宝集成开发的文档居然没有说怎样生成支付宝公钥,这个问题也是搞了好久才明白过来。支付宝公钥文件的格式如下:

-----BEGIN PUBLIC KEY-----

xxxxx
xxxxx

xxxxx

-----END PUBLIC KEY-----

中间内容部分是签约后台上获取的支付宝公钥,将空格去掉,换成换行就可以了。文件保存为alipay_public_key.pem。(当然名字可以改的,前提是服务器端的验签代码也要改成相应的文件名)


 

iOS app支付宝接口调用的一点总结

由于app内需要用到支付功能,选择了当前最流行的支付宝进行支付。在进行内嵌支付宝功能开发时,被它狠狠的耍了一把。

根据支付宝开发文档,参考demo代码。将相关支付功能加到了自己的代码中。一些根据文档来做,也没有太大的难度。但添加完代码,进行测试时,问题却来了。在app中可以成功调用支付宝app,成功支付并返回。这个时候就出现问题了。在app delegate支付宝回调本app的执行函数中,公钥验证签名成功后,会对支付结果进行提示。根据demo,提示支付的代码如下:

[cpp] view plaincopy
  1. UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:result.statusMessage delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];  
[cpp] view plaincopy
  1. [alertView show];  
[cpp] view plaincopy
  1. [alertView release];  

问题就出现在这里了。支付成功后,result.statusMessage返回的值却是空的。而我测试取消支付,这个返回值却是正确的,提示“操作取消”之类的文字(具体忘记了)。支付失败没有进行测试。这下麻烦了,不知问题出在哪里。总不能支付成功后,返回一个空的提示吧。或者直接将提示自己写死,显示“支付成功”?那万一是其他信息提示咋办呢?

重复对比了demo和自己程序的代码,发现没有错漏的地方。百思不得其解,于是想是不是支付宝后台的问题?又根据支付宝服务器端的开发文档,仔细检查,反复测试了。还是找不到原因。

这下没撤了,只能打支持电话,加入一个交流群,问了支付宝负责技术的人,反复说明问题后,终于得到了答覆,支付成功时,result.statusMessage是没有返回值的,大概意思是后来取消了这个返回值。

我的妈阿,对返回值作了改变,为啥文档又没说明,让我等苦逼的程序猿白白折磨了一两天,情何以堪呢。客气的将我的想法提了给支付宝的技术支持,回复说:不要太相信demo。shit,这是人话吗,我用你的接口,不是根据你的文档和demo,那我会担心出错的,而且这是涉及到金钱问题,所以更加不能马虎。内心暗骂了一通之后,又将我的一番建议,例如要求再进一步完善文档,对细节再进一步谨慎之类的提交到支付宝技术支持那里。到此,我的痛苦的支付宝接口调用过程就告一段落了。写这篇文章,算是提醒自己或者有需要的人,有不明白的地方,第一时间找支付宝的技术支持,不要自己瞎折腾了,说不定你碰到的问题不是自己的问题,而是出在第三方接口上。

另外说一下,支付宝网站上找技术支持,直接点支持旺旺是没反应的,你需要打电话去问,才能拿到技术支持的旺旺号,这里公布一下支付宝技术支持群的旺旺号,应该不会被支付宝的人骂吧。呵呵

旺旺号:24768316 
密码:alipay2010