前言
现在移动应用的开发中,需要支付的场景很多,这篇文章主要介绍android上微信支付的相关细节,首先建议有这方面需求的人直接上官网下载demo,查询接口文档,不要首先想着去第三方论坛找demo或者解答,这样会少走很多弯路。本文不再赘述在微信开放平台申请app_id,app_key(默认你已经会了,并且有了)。
- 微信开发平台
- 微信商户平台
客户端的开发主要用到微信开发平台,参数配置也是在开发平台。登录账号后:管理中心 - - - 创建移动应用 - - - 填写基本信息提交审核(一周左右时间审核通过) - - - 点应用查看 - - -开发信息(修改)。IOS应用添加Bundle ID即可,Android开发添加应用包名和应用签名,这些在官方开发文档里写的非常清楚了,请参考官方文档。需要特别说明的是,签名一定要用你自己应用的正式keystore签名(这样当然有一点比较麻烦就是,你每次开发debug时要用签名导出安装才能正常支付,不能直接在手机上run Application)。签名是32位的MD5码,官网也有提供签名工具(文章结尾有下载地址)。
支付流程
下面我就来说一说微信支付开发时需要注意的地方:
1 首先来看一下,微信支付的架构和流程图
2 再来看一下成功调起微信支付的界面
配置工程
1 wxapi.WXPayEntryActivity
这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名,否则无法调起微信支付,(开发文档和官方的demo都有提到这点,但是描述没有很详细,容易被坑)。WXPayEntryActivity是请求支付的回调类,再次要特别说明的是,wxapi的包名,WXPayEntryActivity的类名都是固定的,不要自己更改,否则回调失败,尤其需要注意的是wxapi要放到你的应用包路径的第一层目录下,比如你的包路径是com.xx.xxx(这个包路径以你的AndroidManifest中的为准。),那么wxapi就一定要是com.xx.xxx.wxapi。要是你自己建了一个com.xx.xxx.pay.wxapi的路径,回调也是有问题的。
2 支付成功通知
在WXPayEntryActivity的OnResp中处理,不能以微信返回的通知界面为准(我遇到的情况,网络不稳定的时候,微信返回界面提示支付失败,但是收到微信通知其实已经支付成功了),必须要去自己的服务器查询支付状态,这里微信建议用轮循机制去查询。
上面是官方的代码,建议你修改成如下的样式。
说明:T是我自己写的一个Toast工具类。回调后返回errCode值的说明:
- 0 成功 展示成功页面
- -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
- -2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。
3 生成prepay_id,在服务器完成,由服务器去跟微信服务器交互,客户端不需要参与。
这和支付宝支付的主要区别之一,支付宝支付需要客户端拼接订单信息,然后调起支付接口。
|
|
4 获取二次签名sign
5 起调微信支付
|
|
6 配置Manifest.xml,权限什么的按照文档的配置就行了
5,支付通知接口和退款接口按照开发文档即可,这里不再赘述。