微信支付(转载二)
微信支付现在主要集成在:1、移动应用开发 2、网站应用开发 3、公众账号开发
本篇主要针对移动应用App集成微信支付,实际项目坑点分享!
一、既予之、与共之:平台资源
1、微信开放平台:https://open.weixin.qq.com/
2、微信公众平台:https://mp.weixin.qq.com/
3、微信支付指引和资源中心:微信支付接入指南和资源下载中心<强力推荐阅读>
https://open.weixin.qq.com/cgi-bin/frame?t=resource/res_main_tmpl&lang=zh_CN
4、微信公众平台支付接口调试工具沙箱地址:可通过沙箱测试验证签名的有效性
http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=pay/index
5、公众平台开发者问答系统:在开发过程中有遇到什么问题,都可以上该平台上找找是否有你需要的答案和解决方案。
http://mp.weixin.qq.com/qa/index.php?qa=questions
6、推荐两个蛮给力的博主:
柳峰:http://blog.csdn.net/lyq8479
<我接触微信公众平台,第一个公众号的开发都是看他的博客进行学习的,小吕强力推荐> 开发语言:JAVA
方倍工作室:http://www.cnblogs.com/txw1958/ 开发语言:PHP
7、小吕在开发微信支付过程中收集的资源一篓筐<SDK /支付DEMO / IOS、Android接口文档 V1.7最新版 /SDK API文档 / Android应用包名签名APK工具>:免费下载址:http://download.csdn.net/detail/l416112167/7665807
二、本篇将不用代码等来介绍微信支付的整个流程过程,因为
1、小吕已提供了上面的平台资源链接、基本上只要你静下心稍微阅读第一个链接和第七个下载链接中小吕提供的【微信支付】APP支付(Android)接口文档V1.7.doc
<小吕阅读过v1.2版、v1.5版、v1.7版 其中阅读完1.7版后 解决了我在前面版本阅读中所有的疑问> 就可以非常清晰的了解整个支付接口调用流程,毕竟为官方文档,小吕也不可能会写的比官方文档还详细。
2、小吕觉得微信提供的demo程序代码也比较清晰。各位可自行下载查看。
3、下面是APP支付(Android)接口文档V1.7.doc文档中最具有代表性的几张截图展示:
图1、APP 支付的用户交互:
图2、更直观详细的交互时序图:
图3、文档书签截图:
整个微信支付开发过程给我的小结就是:文档虽详细、坑点却不少<特别是针对Android开发者>。
三、避开坑点,慷慨大道我走来:
坑点1:运行官方的demo程序为什么还是没调出支付界面?
正确运行demo调出微信支付界面效果如下:
那为什么有些同事运行demo程序提示能获取到prepayid成功 但是却始终没有见到如上图的支付UI,就提示微信支付结果:-1 呢?
PS:这里备注说明一下:微信支付常见有3种支付结果code返回
resp.errCode== 0 :表示支付成功
resp.errCode== -1 :表示支付失败
resp.errCode== -2 :表示取消支付
原因:运行时没有使用、配置demo程序sdk demo工程目录中的debug.keystore文件
运行sdk demo工程正确步骤:
1、解压sdk demo工程压缩包,并导入到workspace,如下图:
2、选择Eclipse顶部菜单Window->Preferences,在弹出的对话框中,选择Android目录下的Build,如下图:
指定Custom debugkeystore选项的路径为sdk demo工程目录中的debug.keystore文件,如下图:
并应用该配置。
3、运行该sdk_sample工程。
坑点2:项目中(非sdk demo程序)调用微信支付接口wxApi.sendReq(mPayRed)不起作用,还是调不出支付界面
问题产生原因分析:
1、首先需要确保商户在微信开放平台上的申请审核流程是否已完成。必须要在所有流程审核通过后才能进行开发调式。即用户能拿到appid/appsecret/appkey/partnerkey。
2、Android应用需要在开放平台绑定应用包名和应用签名后才能正常使用。填写不正确将无法正常调起支付。
<IOS应用不需要这一过程>
签名工具下载地址:
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
注意:比如我们的客户商户是用的自己的生产环境.keystore签名文件对apk进行的签名,然后使用微信提供的包名签名工具生成的应用签名字符串与应用包名绑定后,那么Android开发者在调试应用时也须要使用客户商户的.keystone文件对apk进行签名后才能调试程序,不然无法调起支付。<这点非常重要,小吕就被坑在这里>
可以使用Gen_Signature_Android.apk 校验应用签名字符串是否和商户填写的一致 如下图:
3、校验订单详情package的扩展字符串定义、app_signature的生成规则、添加prepayid再次签名这三个过程是否都正确,可通过沙箱测试验证签名的有效性, 沙箱地址:
http://mp.weixin.qq.com/debug/cgi-bin/readtmpl?t=pay/index
4、签名过程不可更改参数名称<一个非常低级的错误,但也是要注意的一个点>:
这里小吕就有遇到这样一个乌龙,算是自己挖了坑给自己跳了
在添加prepayid再次签名的过程中:如下图
因为签名后返回给APP的json字符串中有一个参数名为package,通常在手机端我们会将json字符串解析成java bean对象,但是package在java中是一个关键字,所以小吕想啊、在返回的json字符串中把package换个名字叫做packageValue吧,这样就方便我直接把json解析成java对象了。就这样问题就来啦,因为在签名生成sign的过程中原本叫做package的参数变成了packageValue,因此签名生成的sign值自然就是错误的,最终导致支付调不起。
坑点3:支付成功后无法跳转到相应的通知Activity界面。
原文地址:http://blog.csdn.net/janice0529/article/details/38051987