本身在兩個項目中接入了移動端支付寶和微信支付,也對支付代碼進行了簡單的封裝。在項目集成與調試的時候遇到了一些問題,本身也一直想找時間進行整理,方便之後在項目中集成與使用。支付寶SDK和微信SDK都進行了相應的更新,我項目中使用的仍是老版本的SDK,下面開始介紹最新版本的SDK集成與使用。c++
在接入前,首先要對流程要有相應的瞭解,主要有如下三個步驟(具體詳情,請點擊上面連接查看):git
[1]、將下面兩個文件拖入到工程 AlipaySDK.bundle AlipaySDK.framework github
添加官方demo中依賴文件到工程,以下圖所示: [2]、 添加依賴庫
libc++.tbd
libz.tbd
SystemConfiguration.framework
CoreTelephony.framework
QuartzCore.framework
CoreText.framework
CoreGraphics.framework
UIKit.framework
Foundation.framework
CFNetwork.framework
CoreMotion.framework
AlipaySDK.famework
sql
注意數組
[3]、配置info.plist,添加支付回調URL scheme,能夠本身定義一個名字,以下圖: 好了,到這裏,SDK庫文件和系統依賴庫都已經導入到工程,若是是Xcode 7.0以後的版本,須要添加libc++.tbd、libz.tbd; 若是是Xcode 7.0以前的版本,須要添加libc++.dylib、libz.dylibbash
command+R
運行一下,你會發現報錯,就是
oppssl/asn1.h not found,在我最開始集成支付寶的時候,這個問題折騰了我很久,網上和官方都能找到解決方法,雖然每次都解決了,可是都嘗試了很久。
報錯解決
一、oppssl/asn1.h not found 微信
$(SRCROOT)/項目名稱
,我寫的
WBPayManagerDemo中的
openssl文件夾在
AliSDK_V15.5.0文件下,因此這裏須要修改
$(SRCROOT)/WBPayManagerDemo/AliSDK_V15.5.0
方式二:將AliSDK_V15.5.0文件夾拖入到
Header Search Paths
微信SDK集成主要有如下三個步驟:app
向微信註冊你的應用程序id 請到 開發者應用登記頁面 進行登記,登記並選擇移動應用進行設置後,將得到AppID,可當即用於開發。但應用登記完成後還須要提交審覈,只有審覈經過的應用才能正式發佈使用。ide
下載微信終端SDK文件 SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三個。 如選用手動集成,請前往「資源下載頁」下載最新SDK包工具
搭建開發環境
pod 'WechatOpenSDK'
注意SystemConfiguration.framework
libz.tbd
libsqlite3.0.tbd
libc++.tbd
Security.framework
CoreTelephony.framework
CFNetwork.framework
複製代碼
注意 Xcode 7.0以前
libz.tbd
對應的是libz.dylib
libsqlite3.0.tbd
對應的是libsqlite3.0.dylib
libc++.tbd
對應的是libc++.dylib
[4]、配置工程
封裝主要是新建了一個工具類,經過封裝工具,能夠將支付寶Block回調和微信的代理回調集中在一個回調裏,支付只需調用一行代碼就OK,我如今的項目都是用的這個支付工具類,下面介紹下核心代碼和使用注意事項吧。
[1]注意URL Types的配置
在WBPayManager.h的頭文件中,定義了兩個URL identifier,因此配置的時候,須要保證info裏的identifier和頭文件定義的一致。
//此處必須保證在Info.plist 中的 URL Types 的 Identifier 對應一致
UIKIT_EXTERN NSString * const ALIPAY_URLIDENTIFIER;/** 支付寶URL NAME */
UIKIT_EXTERN NSString * const WECHAT_URLIDENTIFIER;/** 微信URL NAME */
複製代碼
[2]、處理支付回調
/** < 微信須要在程序加載完成註冊 > */
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[WBPayManager shareManager] wb_registerApp];
return YES;
}
/**
*
* 最老的版本,最好也寫上
*/
- (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 以前 會調用 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [[WBPayManager shareManager] wb_handleUrl:url];
}
複製代碼
[3]、發起支付
//直接傳入後臺返回的訂單信息支付串
[[WBPayManager shareManager] wb_payWithOrderInfo:orderInfo payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
//支付結果回調
}]
複製代碼
//構建PayReq對象,後臺返回
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) {
//支付結果回調
}]
複製代碼
具體詳情,請戳GitHub:WBPayManagerDemo
終於整理完成了,經過此次整理,但願之後在項目集成少遇到一些坑吧,微信的支付文檔感受確實有點老了,SDK在更新,文檔卻沒有更新,不過也沒有關係。最新版本的SDK在本身的項目中也沒有使用,項目中仍是用的老版本的SDK,我也將老版本SDK的下載連接也放在文章中。若有不對的地方,歡迎指正,但願這篇文章能對你有所幫助。