今天心情那真是想要强奸吉娃娃的冲动 说白了就是不想做和工作沾边的任何事 但是也不能闲着啊 时间那么贵
之前就想把微信支付做一下 主要就是怕自己忘记了 今天难得有时间 就来简单的记录一下 旨在提高自己
如果要在app中介入微信的支付功能 其实坑还是稍微有点多的 但是也不是不能解决 毕竟现在百度那么强大
正事开启
(1).首先你要去微信开放平台去注册一个账号 然后完成开发者认证 然后完成商户资料填写 然后还要在线签合同 填写账号资料 反正就是等等吧 这些的都不是今天要说的重点,今天要说的是在你上述资料都完事了之后 拿到APPID后来开发的过程
(2).好哒 ,现在你已经拿到了appID的信息了 那么就来愉快的接入吧
(3).其实到这一步,才是真正开启今天我要说的主题的 👻
(4).下载微信的SDK 然后把 libWeChatSDK.a 、WXApi.h 、 WXApiObject.h 这三个文件拖到你的项目中去,并在Bridging-Header.h文件中添加如下两行代码
#import "WXApi.h" #import "WXApiObject.h"
@import UIKit; //使用1.6版必须有(PS:1.5版可以不要)这句话你最好看一下
(5).然后加入这些依赖库 看准了哈 别加错了
SystemConfiguration.framework,libz.dylib,libsqlite3.0.dylib,libc++.dylib,Security.framework,CoreTelephony.framework
在pilst文件中加入应用的白名单 (你可以直接用文本编辑打开pilst文件,然后将下面的代码直接粘贴到 倒数第二行的上面,简单粗暴,但是很好使)
<key>LSApplicationQueriesSchemes</key>
<array>
<string>weixin</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
(6).设置URL Types
URL Schema中填写之前创建的应用的AppID
(7)在appdelegate里
注册一下你的应用
WXApi.registerApp(“你的应用ID”, withDescription: "wxin")
重写下面这个方法
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
print("openURL:\(url.absoluteString)")
if url.scheme == WX_APPID {
return WXApi.handleOpenURL(url, delegate: self)
}
(8)接下来你就可以在你用到微信支付的地方直接调起微信了
(微信支付和支付宝支付流程有些不一样,微信支付会在真正发起支付请求钱先发起PrePay(预支付)请求,然后利用PrePay发起支付请求。Demo中的PrePay是在客户端生成的,但是更加安全的方式是在服务端生成PrePay)
/**
微信支付方法
:param: wxDict 从服务器返回来的字典数据
*/
func sendWXPay(wxDict: [String: AnyObject]) {
if !WXApi.isWXAppInstalled() {//检查一下是否可以使用微信
SwiftNotice.showText("未安装微信")
return
} else if !WXApi.isWXAppSupportApi() {
SwiftNotice.showText("当前版本微信不支持微信支付")
return
}
let req = PayReq()
req.openID = wxDict["appid"] as! String
req.partnerId = wxDict["partnerid"] as! String
req.prepayId = wxDict["prepayid"] as! String
req.package = wxDict["packageValue"] as! String
req.timeStamp = UInt32(wxDict["timestamp"] as! String)!
req.nonceStr = wxDict["noncestr"] as! String
req.sign = wxDict["sign"] as! String
WXApi.sendReq(req) //调起微信
}
(9)处理微信支付完事之后的事情
// MARK: - WXApiDelegate
func onReq(req: BaseReq!) {//这个方法暂时好像用不到 不过你最好还是实现它
}
func onResp(resp: BaseResp!) {
if resp.isKindOfClass(PayResp.classForCoder()) {
//支付返回结果,实际支付结果需要去微信服务器端查询
switch resp.errCode {
case WXSuccess.rawValue:
print("支付成功")
//在这里你是不是可以去干你想干的事了呢
break
default:
//当然了 失败了也是要干事情滴
break
}
}
}
完事 大功告成