自己在兩個(gè)項(xiàng)目中接入了移動(dòng)端支付寶和微信支付塔嬉,也對(duì)支付代碼進(jìn)行了簡(jiǎn)單的封裝。在項(xiàng)目集成與調(diào)試的時(shí)候遇到了一些問(wèn)題细诸,自己也一直想找時(shí)間進(jìn)行整理,方便以后在項(xiàng)目中集成與使用糟需。支付寶SDK和微信SDK都進(jìn)行了相應(yīng)的更新,我項(xiàng)目中使用的還是老版本的SDK,下面開(kāi)始介紹最新版本的SDK集成與使用。
一糊探、支付寶
1> 快速接入
在接入前钾埂,首先要對(duì)流程要有相應(yīng)的了解河闰,主要有以下三個(gè)步驟(具體詳情科平,請(qǐng)點(diǎn)擊上面鏈接查看):
- 創(chuàng)建應(yīng)用并獲取APPID
-
配置應(yīng)用
1.png -
集成和開(kāi)發(fā)
81fdbf664f654970835e5426b55959f6.jpg
2> SDK下載
- SDK&DEMO
- AliSDK_V15.4.1(現(xiàn)在項(xiàng)目中使用的版本)
- AliSDK_V15.5.0
3> 集成SDK
[1]、將下面兩個(gè)文件拖入到工程
AlipaySDK.bundle
AlipaySDK.framework
添加官方demo中依賴(lài)文件到工程姜性,如下圖所示:
[2]瞪慧、 添加依賴(lài)庫(kù)
libc++.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
UIKit.framework
Foundation.framework
CFNetwork.framework
CoreMotion.framework
AlipaySDK.famework
注意
如果是Xcode 7.0之后的版本,需要添加libc++.tbd部念、libz.tbd弃酌;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib儡炼、libz.dylib
[3]妓湘、配置info.plist,添加支付回調(diào)URL scheme,可以自己定義一個(gè)名字乌询,如下圖:
好了榜贴,到這里,SDK庫(kù)文件和系統(tǒng)依賴(lài)庫(kù)都已經(jīng)導(dǎo)入到工程妹田,
command+R
運(yùn)行一下唬党,你會(huì)發(fā)現(xiàn)報(bào)錯(cuò),就是oppssl/asn1.h not found鬼佣,在我最開(kāi)始集成支付寶的時(shí)候驶拱,這個(gè)問(wèn)題折騰了我好久,網(wǎng)上和官方都能找到解決方法晶衷,雖然每次都解決了蓝纲,但是都嘗試了好久。
報(bào)錯(cuò)解決
1晌纫、oppssl/asn1.h not found
在Build Settings下搜索Header Search Paths中添加
$(SRCROOT)/項(xiàng)目名稱(chēng)
,我寫(xiě)的WBPayManagerDemo中的openssl文件夾在AliSDK_V15.5.0文件下驻龟,所以這里需要修改方式一:手動(dòng)添加路徑
$(SRCROOT)/WBPayManagerDemo/AliSDK_V15.5.0
方式二:將AliSDK_V15.5.0文件夾拖入到Header Search Paths
二、微信
1> 接入指南
微信SDK集成主要有以下三個(gè)步驟:
向微信注冊(cè)你的應(yīng)用程序id
請(qǐng)到 開(kāi)發(fā)者應(yīng)用登記頁(yè)面 進(jìn)行登記缸匪,登記并選擇移動(dòng)應(yīng)用進(jìn)行設(shè)置后翁狐,將獲得AppID,可立即用于開(kāi)發(fā)凌蔬。但應(yīng)用登記完成后還需要提交審核露懒,只有審核通過(guò)的應(yīng)用才能正式發(fā)布使用。下載微信終端SDK文件
SDK文件包括 libWeChatSDK.a砂心,WXApi.h懈词,WXApiObject.h 三個(gè)。
如選用手動(dòng)集成辩诞,請(qǐng)前往“資源下載頁(yè)”下載最新SDK包搭建開(kāi)發(fā)環(huán)境
2> 項(xiàng)目集成
- 1坎弯、通過(guò)CocoaPods集成
pod 'WechatOpenSDK'
注意 - 命令行下執(zhí)行pod search WechatOpenSDK,如顯示的WechatOpenSDK版本不是最新的,則先執(zhí)行pod repo update操作更新本地repo的內(nèi)容
- 對(duì)于之前SDK放在主工程目錄下,切換成CocoaPods的形式抠忘,執(zhí)行pod install 之后撩炊,出現(xiàn)
Use the $(inherited) flag, or
Remove the build settings from the target.
解決方法是 把工程target中的build Setting里面PODS_ROOT的值替換成$(inherited)Other Linker Flags中 -all_load 替換成$(inherited)
image
image
2、手動(dòng)集成
[1]崎脉、SDK下載 - 官方下載地址
- WeChatSDK_V1.7.8(現(xiàn)在項(xiàng)目使用的版本拧咳,通過(guò)ShareSDK導(dǎo)入)
-
WechatSDK1.8.2
[2]、導(dǎo)入工程
將WechatSDK1.8.2文件夾(libWeChatSDK.a囚灼、WechatAuthSDK.h骆膝、WXApi.h、WXApiObject.h)拖入到工程灶体。
屏幕快照 2018-01-04 下午2.42.39.png
[3]阅签、添加依賴(lài)庫(kù)
SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
libc++.tbd
Security.framework
CoreTelephony.framework
CFNetwork.framework
注意
Xcode 7.0之前
libz.tbd
對(duì)應(yīng)的是libz.dylib
libsqlite3.0.tbd
對(duì)應(yīng)的是libsqlite3.0.dylib
libc++.tbd
對(duì)應(yīng)的是libc++.dylib
[4]、配置工程
-
在你的工程文件中選擇Build Setting蝎抽,在"Other Linker Flags"中加入"-Objc -all_load"愉择,在Search Paths中添加 libWeChatSDK.a ,WXApi.h织中,WXApiObject.h锥涕,文件所在位置(如下圖所示)。
屏幕快照 2018-01-04 下午3.00.25.png - 在info.plist添加key為LSApplicationQueriesSchemes狭吼,Type為數(shù)組類(lèi)型层坠,添加一個(gè)item為weixin,如下圖所示:
屏幕快照 2018-01-04 下午3.04.56.png -
在Xcode中刁笙,選擇你的工程設(shè)置項(xiàng)破花,選中“TARGETS”一欄,在“info”標(biāo)簽欄的“URL type“添加“URL scheme”為你所注冊(cè)的應(yīng)用程序id
屏幕快照 2018-01-04 下午3.13.56.png
三疲吸、支付封裝
封裝主要是新建了一個(gè)工具類(lèi)座每,通過(guò)封裝工具,可以將支付寶Block回調(diào)和微信的代理回調(diào)集中在一個(gè)回調(diào)里摘悴,支付只需調(diào)用一行代碼就OK峭梳,我現(xiàn)在的項(xiàng)目都是用的這個(gè)支付工具類(lèi),下面介紹下核心代碼和使用注意事項(xiàng)吧蹂喻。
[1]注意URL Types的配置
在WBPayManager.h的頭文件中葱椭,定義了兩個(gè)URL identifier,所以配置的時(shí)候口四,需要保證info里的identifier和頭文件定義的一致孵运。
//此處必須保證在Info.plist 中的 URL Types 的 Identifier 對(duì)應(yīng)一致
UIKIT_EXTERN NSString * const ALIPAY_URLIDENTIFIER;/** 支付寶URL NAME */
UIKIT_EXTERN NSString * const WECHAT_URLIDENTIFIER;/** 微信URL NAME */
[2]、處理支付回調(diào)
/** < 微信需要在程序加載完成注冊(cè) > */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[WBPayManager shareManager] wb_registerApp];
return YES;
}
/**
*
* 最老的版本蔓彩,最好也寫(xiě)上
*/
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
/** * iOS 9.0 之前 會(huì)調(diào)用 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
[3]治笨、發(fā)起支付
- 支付寶
//直接傳入后臺(tái)返回的訂單信息支付串
[[WBPayManager shareManager] wb_payWithOrderInfo:orderInfo payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
//支付結(jié)果回調(diào)
}]
- 微信
//構(gòu)建PayReq對(duì)象驳概,后臺(tái)返回
PayReq * req = [PayReq new];
req.partnerId = orderModel.wechatpay_data.partnerid;
req.prepayId= orderModel.wechatpay_data.prepayid;
req.package = orderModel.wechatpay_data.package;
req.nonceStr= orderModel.wechatpay_data.noncestr;
req.timeStamp= (UInt32)[orderModel.wechatpay_data.timestamp integerValue];
req.sign= orderModel.wechatpay_data.sign;
[[WBPayManager shareManager] wb_payWithOrderInfo:req payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
//支付結(jié)果回調(diào)
}]
具體詳情,請(qǐng)戳GitHub:WBPayManagerDemo
結(jié)語(yǔ)
終于整理完成了旷赖,通過(guò)這次整理顺又,希望以后在項(xiàng)目集成少遇到一些坑吧,微信的支付文檔感覺(jué)確實(shí)有點(diǎn)老了杠愧,SDK在更新,文檔卻沒(méi)有更新逞壁,不過(guò)也沒(méi)有關(guān)系流济。最新版本的SDK在自己的項(xiàng)目中也沒(méi)有使用,項(xiàng)目中還是用的老版本的SDK腌闯,我也將老版本SDK的下載鏈接也放在文章中绳瘟。如有不對(duì)的地方,歡迎指正姿骏,希望這篇文章能對(duì)你有所幫助糖声。