项目需要,我们的app中采用了两种支付方式,一种是微信支付,另一种是支付宝支付,这两种方式是目前最受欢迎的方式吧,殊不知,由于各种支付接口的升级,在开发中我们会遇上各种不为人知的问题,今天就顺便记录一下,便于日后查看或者需要的朋友作为一个参考。
开发步骤:
1、新用户微信开放平台进行注册,并认证,认证需要300元,https://open.weixin.qq.com/
2、登录进行创建应用,按照要求填写IOS的Bundle ID和Android的应用签名及包名,如此应用就创建好了。
3、申请支付功能,申请条件是服务号或者企业号,申请成功后会收到一个审核成功的邮件,根据邮件提供是的商户名和密码登录到商户平台,点击账户设置-->API安全-->API秘钥-->设置秘钥(秘钥是32位),设置成功后,要记住这个秘钥,支付的时候需要用上这个东西。具体情况请戳 http://kf.qq.com/faq/140225MveaUz150107UVFNjy.html
4、准备工作就绪后我们开始正式开发了,此时我们一般都进入微信支付开发文档,根据需求下载demo,和查看文档接口,看看如何接入到app中,https://pay.weixin.qq.com/wiki/doc/api/index.html
5、下载DEMO后,我们有几个地方需要注意:(1)替换App_ID为我们的申请的APPID;(2)替换商户号为我们申请支付成功后的商户号;(3)替换API秘钥,这是我们在步骤3的时候自己设定的。
6、运行DEMO,返回的结果为-1,哈哈,是不是觉得应该成功才对?怎么会支付失败呢?我们对应一下支付开发步骤:(1)注册APP;(2)获取预支付ID;(3)根据预支付ID进行签名①;(4)向微信支付进行请求。
反正我用上面的方式,步骤上跟官方文档一样,接入的方式也是按照demo来进行的,可是还是失败的,我相信很多人都会失败,因为现在的官方文档更新过后,很多东西都面目全非了,接下来我将慢慢把我接入到项目中遇上的问题一一列出:
(1)接入到项目中后,遇上的第一个问题就是签名错误,<return_msg><![CDATA[SIGN ERROR]]></return_msg>
(2)时间不一致,
<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[time_expire时间过短,刷卡至少1分钟,其他5分钟]]></return_msg>
</xml>
(3)支付返回-1
反反复复的测试了好多次,都没有成功,实在令人心烦,后来我辗转找到了一个DEMO,跟官方的demo有很大的不同,经过整理后这个demo能支付成功,终于解决了我的这块心病,真有种支付之难,难于官方文档胡搅蛮缠,因为我们太信任官方文档了,殊不知官方文档也有欺骗我们的时候,待会我将DEMO上传后大家一比便知。
顺便把列出的问题说说:(1)签名问题错误,原因很多的,比如API_KEY错误(其他人把API_KEY换掉),组织签名的参数没有按照文档的规则处理,规则请看官网文档的要求;(2)时间不一致是需要以UTC时间来换算,且按照要求的间隔时间来计算时间;(3)支付返回-1,这个问题也是说不清道不明的东西,就我遇上的问题说说,可能每个人的情况不一致,如果大家用本人说的方式不能解决的,请继续Google查查,本人遇上的情况是:①按照demo配置好了,其中某些小细节出的问题,请下载文章末尾提供的demo进行比对,替换相应的参数;②以前是支付成功的,一段时间后,某一天支付的时候返回-1了,解决方案是清除掉缓存,或者把app卸载掉,重新安装试试;③某天莫名其妙的支付失败了,提示错误是 Failed to find provider info for com.tencent.mm.sdk.plugin.provider 这个问题的解决方案是,微信版本太低,更新到最新的微信版本,支付就解决了。
综上:完成支付的这个过程中真是扑朔迷离,解决了后我们却是柳暗花明,让人兴奋不已,本人想说的是,官方文档麻烦更新给力点,会扰乱我们开发者的。
本文出自 “吸博取精自我更新” 博客,请务必保留此出处http://wyong.blog.51cto.com/1115465/1670587
原文地址:http://wyong.blog.51cto.com/1115465/1670587