最新版本支付寶與微信支付集成與使用

自己在兩個項目中接入了移動端支付寶和微信支付,也對支付代碼進行了簡單的封裝。在項目集成與調(diào)試的時候遇到了一些問題,自己也一直想找時間進行整理,方便以后在項目中集成與使用。支付寶SDK微信SDK都進行了相應的更新,我項目中使用的還是老版本的SDK,下面開始介紹最新版本的SDK集成與使用。

一、支付寶

1> 快速接入

在接入前,首先要對流程要有相應的了解,主要有以下三個步驟(具體詳情,請點擊上面鏈接查看):

  • 創(chuàng)建應用并獲取APPID
  • 配置應用


    1.png
  • 集成和開發(fā)


    81fdbf664f654970835e5426b55959f6.jpg

2> SDK下載

3> 集成SDK

[1]、將下面兩個文件拖入到工程
AlipaySDK.bundle
AlipaySDK.framework

屏幕快照 2018-01-04 上午11.18.23.png

添加官方demo中依賴文件到工程,如下圖所示:
屏幕快照 2018-01-04 上午11.45.26.png

[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

注意

如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib

屏幕快照 2018-01-04 上午11.17.28.png

[3]、配置info.plist,添加支付回調(diào)URL scheme,可以自己定義一個名字,如下圖:
屏幕快照 2018-01-04 下午3.19.54.png

好了,到這里,SDK庫文件和系統(tǒng)依賴庫都已經(jīng)導入到工程,command+R運行一下,你會發(fā)現(xiàn)報錯,就是oppssl/asn1.h not found,在我最開始集成支付寶的時候,這個問題折騰了我好久,網(wǎng)上和官方都能找到解決方法,雖然每次都解決了,但是都嘗試了好久。

報錯解決
1、oppssl/asn1.h not found

屏幕快照 2018-01-04 上午11.48.22.png

Build Settings下搜索Header Search Paths中添加$(SRCROOT)/項目名稱,我寫的WBPayManagerDemo中的openssl文件夾在AliSDK_V15.5.0文件下,所以這里需要修改
方式一:手動添加路徑
$(SRCROOT)/WBPayManagerDemo/AliSDK_V15.5.0
屏幕快照 2018-01-04 下午12.01.02.png

方式二:將AliSDK_V15.5.0文件夾拖入到Header Search Paths
Untitled.gif

二、微信

1> 接入指南

微信SDK集成主要有以下三個步驟:

  • 向微信注冊你的應用程序id
    請到 開發(fā)者應用登記頁面 進行登記,登記并選擇移動應用進行設置后,將獲得AppID,可立即用于開發(fā)。但應用登記完成后還需要提交審核,只有審核通過的應用才能正式發(fā)布使用。

  • 下載微信終端SDK文件
    SDK文件包括 libWeChatSDK.a,WXApi.h,WXApiObject.h 三個。
    如選用手動集成,請前往“資源下載頁”下載最新SDK包

  • 搭建開發(fā)環(huán)境

2> 項目集成

  • 1、通過CocoaPods集成
    pod 'WechatOpenSDK'
    注意
  • 命令行下執(zhí)行pod search WechatOpenSDK,如顯示的WechatOpenSDK版本不是最新的,則先執(zhí)行pod repo update操作更新本地repo的內(nèi)容
  • 對于之前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、手動集成
    [1]、SDK下載
  • 官方下載地址
  • WeChatSDK_V1.7.8(現(xiàn)在項目使用的版本,通過ShareSDK導入)
  • WechatSDK1.8.2
    [2]、導入工程
    將WechatSDK1.8.2文件夾(libWeChatSDK.aWechatAuthSDK.h、WXApi.hWXApiObject.h)拖入到工程。
    屏幕快照 2018-01-04 下午2.42.39.png

    [3]、添加依賴庫
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]、配置工程

  • 在你的工程文件中選擇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ù)組類型,添加一個item為weixin,如下圖所示:
    屏幕快照 2018-01-04 下午3.04.56.png
  • 在Xcode中,選擇你的工程設置項,選中“TARGETS”一欄,在“info”標簽欄的“URL type“添加“URL scheme”為你所注冊的應用程序id


    屏幕快照 2018-01-04 下午3.13.56.png

三、支付封裝

封裝主要是新建了一個工具類,通過封裝工具,可以將支付寶Block回調(diào)和微信的代理回調(diào)集中在一個回調(diào)里,支付只需調(diào)用一行代碼就OK,我現(xiàn)在的項目都是用的這個支付工具類,下面介紹下核心代碼和使用注意事項吧。
[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  */
屏幕快照 2018-01-04 下午3.59.03.png

[2]、處理支付回調(diào)

/**  < 微信需要在程序加載完成注冊 >  */
- (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 之前 會調(diào)用  */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [[WBPayManager shareManager] wb_handleUrl:url];
}

[3]、發(fā)起支付

  • 支付寶
//直接傳入后臺返回的訂單信息支付串
[[WBPayManager shareManager] wb_payWithOrderInfo:orderInfo payCallBack:^(WBPayStatusCode errorCode, NSString *errorStr) {
    //支付結(jié)果回調(diào)
}]
  • 微信
//構(gòu)建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) {
    //支付結(jié)果回調(diào)
}]

具體詳情,請戳GitHub:WBPayManagerDemo

結(jié)語

終于整理完成了,通過這次整理,希望以后在項目集成少遇到一些坑吧,微信的支付文檔感覺確實有點老了,SDK在更新,文檔卻沒有更新,不過也沒有關系。最新版本的SDK在自己的項目中也沒有使用,項目中還是用的老版本的SDK,我也將老版本SDK的下載鏈接也放在文章中。如有不對的地方,歡迎指正,希望這篇文章能對你有所幫助。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容