一. 微信支付步骤
1 | 1. 用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。 |
二. 微信支付流程
下图是微信开发者文档给的流程图
流程图看着繁琐其实具体就三步:
- app接入微信支付SDK,选中商品支付前调用后台给的接口接收调用微信支付需要的参数如tradeToken、orderInfo等。需要注意的是一般后台给的string字符串需要转成json。
- 拿到参数后调用微信支付API。
- 支付过后一般微信会有支付结果返回,但是安全起见让后台去验证支付是否成功。
流程大概是上面三个步骤
三. 开发流程
1. 集成微信支付SDK SDK下载地址
- 手动集成
将SDK拖到项目中点击项目选中Build Phases > Link Binary With Libraries 添加依赖库。
- 过CocoaPods集成
在工程的Podfile里面添加以下代码:
1 | pod 'WechatOpenSDK' |
保存并执行pod install。
2. 设置URL Types
选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL Types“添加“URL scheme”为你所注册的应用程序id
Xcode设置URL scheme
3. 添加代码
- AppDelegate
1 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { |
delegate的类根据自己的需求可以自定义,目前我们项目时这样写的。获取到支付回调后请求后台验证接口,验证支付是否成功。需要注意的是设置过代理后需要遵守微信协议WXApiDelegate
关于集成支付宝在下篇文章传送门
- 回调单例类CdWeChatAPIManager
1 | .h |
- 处理微信支付回调结果
在需要展示的地方遵守协议
1 | - (void)managerDidRecvAuthBaseResp:(BaseResp *)response{ |
回调中errCode值列表:
名称 | 描述 | 解决方案 |
---|---|---|
0 | 成功 | 展示成功页面 |
-1 | 错误 | 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 |
-2 | 用户取消 | 无需处理。发生场景:用户不支付了,点击取消,返回APP。 |
写在最后
- 关于掉单问题目前我们的解决办法是每调起支付会创建一个事件放到数据库中,如果正常情况支付完成了会把数据删了如果发生断网,关机等情况,有网时或者开机。会检测数据库是否有未完成的订单去后台查询支付是否完成,商品是否购买成功。
- 关于签名问题最好是让后台去做不要APP端完成,不然风险太大。
- 关于调微信支付的参数:签名APPID等是根据某个字符分开的,取到后需要自己拼。
- 关于注册APPID问题产品或者运营一般都弄好了如果自己申请网站申请后需要微信审核。