iOS 微信支付 ---Swift版

2016-11-25  本文已影响171人  令狐灵犀

1 微信商户平台

2 SDK 下载

官方网站下载SDK及Demo

3 微信支付流程

以下是交互时序图,统一下单API、支付结束通知API和查询订单API等都涉及签名过程,调用都必须在商户服务端完成。如下图

4 关联库

解压后的Demo中在文件夹SDKExport下面有 libWeChatSDK.a 、WXApi.h 、 WXApiObject.h 这三个文件。把这三个文件拖到你的项目里面,并在Bridging-Header.h文件中添加如下两行代码。
<pre><code>

import "WXApi.h"

import "WXApiObject.h"

</code></pre>

5 设置URL Types

URL Schema中填写之前创建的应用的AppID
<img src= "http://7xpxoe.com1.z0.glb.clouddn.com/URL%20Types.png" width="500px" />

6 在Appdelegate中注册微信支付

<pre><code>
WXApi.registerApp(WAPPID, withDescription: "DEMO")
</code></pre>

7 获取PrePay信息并发起支付请求

微信支付和支付宝支付流程有些不一样,微信支付会在真正发起支付请求钱先发起PrePay(预支付)请求,然后利用PrePay发起支付请求。Demo中的PrePay是在客户端生成的,但是更加安全的方式是在服务端生成PrePay。
<pre><code>
DataService.wxPrePay(order.id) {[weak self] (prepay, error) -> () in
if let strongSelf = self {
if let prepay = prepay {
let req = PayReq()
req.openID = prepay.appID
req.partnerId = prepay.partnerID
req.prepayId = prepay.prepayID
req.nonceStr = prepay.noncestr
req.timeStamp = UInt32(prepay.timestamp)
req.package = prepay.package
req.sign = prepay.sign
WXApi.sendReq(req)
} else {
strongSelf.delegate?.paymentFail(paymentType: .Weichat)
let alert = UIAlertView(title: nil, message: "获取支付信息失败,请重新支付!", delegate: nil, cancelButtonTitle: "好的")
alert.show()
}
}
}
</pre></code>

8 支付回调

App支付完成后返回App, 在Appdelegate中实现协议 WXApiDelegate 中的 onResp方法
<pre><code>
func onResp(resp: BaseResp!) {
var strTitle = "支付结果"
var strMsg = "(resp.errCode)"
if resp.isKindOfClass(PayResp) {
switch resp.errCode {
case 0 :
NSNotificationCenter.defaultCenter().postNotificationName(WXPaySuccessNotification, object: nil)
default:
strMsg = "支付失败,请您重新支付!"
print("retcode = (resp.errCode), retstr = (resp.errStr)")
}
}
let alert = UIAlertView(title: nil, message: strMsg, delegate: nil, cancelButtonTitle: "好的")
alert.show()
}
</code></pre>

9 通知服务器支付成功

如果支付成功后,微信服务器会向你的服务器 notify URL 发起支付成功的请求。这样就可以在服务端实现一些相关的业务逻辑,比如标机订单为已支付,发短信给用户等

10 参考文档

微信官方文档

iOS集成微信支付-Swift版

上一篇下一篇

猜你喜欢

热点阅读