iOS不用官方SDK實(shí)現(xiàn)微信和支付寶支付XHPayKit

微信膛锭、支付寶支付

前言

前段時(shí)間由于項(xiàng)目需求,移除了項(xiàng)目中的微信支付SDK和支付寶支付SDK,這種情況下需要自己搞定支付,第一時(shí)間考慮到的是使用openshare,但是當(dāng)下載openshare下來(lái)后發(fā)現(xiàn),openshare的支付接口,并不能直接替換官方SDK支付接口,

官方SDK的實(shí)現(xiàn)邏輯是后臺(tái)訂單簽名完成后,客服端傳簽名信息及參數(shù)給支付SDK,支付SDK生成協(xié)議url,然后拉起第三方支付APP,

而openshare的支付接口是直接傳拉起支付的協(xié)議url地址,將生成協(xié)議url地址的操作也交給后臺(tái)來(lái)生成,
這樣的話后臺(tái)需要修改代碼,

能否不修改后臺(tái)代碼,弄一個(gè)支付接口直接替換官方SDK支付接口,實(shí)現(xiàn)無(wú)縫對(duì)接呢,于是就研究了下微信和支付寶支付時(shí)APP間通訊關(guān)系,最后封裝成XHPayKit.

特性:

1.XHPayKit擁有和官方SDK類(lèi)似接口,可以直接替換官方SDK支付接口,如果你使用過(guò)官方SDK,那么轉(zhuǎn)換為本庫(kù)你只需花費(fèi)極短時(shí)間.

2.XHPayKit只有10kb大小,不用導(dǎo)入任何依賴庫(kù),便可實(shí)現(xiàn)微信支付花颗、支付寶支付,如果你想為項(xiàng)目瘦身或由于某種原因,不想使用官方SDK實(shí)現(xiàn)支付功能,此庫(kù)將是一個(gè)不錯(cuò)的選擇.

3.XHPayKit使用時(shí),不需要配置微信等平臺(tái)appid等信息,服務(wù)端配置就可以了,因?yàn)楹笈_(tái)簽名訂單時(shí)會(huì)返回appid等信息給客戶端.

注意:

1.先在微信颂斜、支付寶開(kāi)放平臺(tái)注冊(cè)你的應(yīng)用,并獲得支付能力

2.導(dǎo)入此庫(kù),并請(qǐng)將 weixin 、 alipay 字段添加到info.plist白名單

3.添加自己APP URL Schemes,和微信回調(diào)URL Schemes,詳見(jiàn)README文檔

使用方法:

1.微信支付


//微信支付參數(shù),下面7個(gè)參數(shù),由后臺(tái)簽名訂單后生成,并返回給客服端(與官方SDK一致)
 //注意:請(qǐng)將下面參數(shù)設(shè)置為你自己真實(shí)訂單簽名后服務(wù)器返回參數(shù),便可進(jìn)行實(shí)際支付
XHPayWxReq *req = [[XHPayWxReq alloc] init];
req.openID = @"";
req.partnerId = @"";
req.prepayId = @"";
req.nonceStr = @"";
req.timeStamp = 1518156229;
req.package = @"";
req.sign = @"";
        
//傳入訂單模型,拉起微信支付
[[XHPayKit defaultManager] wxpayOrder:req completed:^(NSDictionary *resultDict) {
          NSLog(@"支付結(jié)果:\n%@",resultDict);
          NSInteger code = [resultDict[@"errCode"] integerValue];
          if(code == 0){//支付成功
                
          }
}];

2.支付寶支付


//支付寶訂單簽名,此簽名由后臺(tái)簽名訂單后生成,并返回給客戶端(與官方SDK一致)
//注意:請(qǐng)將下面值設(shè)置為你自己真實(shí)訂單簽名,便可進(jìn)行實(shí)際支付
NSString *orderSign = @"很長(zhǎng)的一串支付寶訂單簽名";
        
//傳入支付寶訂單簽名 和 自己App URL Scheme,拉起支付寶支付
[[XHPayKit defaultManager] alipayOrder:orderSign fromScheme:@"XHPayKitExample" completed:^(NSDictionary *resultDict) {
    NSLog(@"支付結(jié)果:\n%@",resultDict);
    NSInteger status = [resultDict[@"ResultStatus"] integerValue];
    if(status == 9000){//支付成功
                
    }
}];

3.在Appdelegate中添加以下代碼 - 處理第三方支付跳回商戶app攜帶的支付結(jié)果Url

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
/** iOS9及以后 */
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
    BOOL result = [[XHPayKit defaultManager] handleOpenURL:url];
    if (!result) {//這里處理其他SDK(例如QQ登錄,微博登錄等)
        
    }
    return result;
}
#endif
/** iOS9以下 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL result = [[XHPayKit defaultManager] handleOpenURL:url];
    if (!result) {//這里處理其他SDK(例如QQ登錄,微博登錄等)
        
    }
    return result;
}

其它接口:

/**
 是否安裝微信

 @return 已安裝YES,未安裝NO
 */
+(BOOL)isWxAppInstalled;

/**
 是否安裝支付寶

 @return 已安裝YES,未安裝NO
 */
+(BOOL)isAliAppInstalled;

支付結(jié)果resultDict釋義:

微信

{
    "errCode":0,
    "errStr":"成功"
}

//以下?tīng)顟B(tài)碼含義與官方SDK一致
errCode = 0,成功
errCode = -1,普通錯(cuò)誤類(lèi)型
errCode = -2,用戶點(diǎn)擊取消并返回
errCode = -3,發(fā)送失敗
errCode = -4,授權(quán)失敗 
errCode = -5,微信不支持

支付寶

{
    "result":"",
    "resultStatus":"9000",
    "memo":"支付成功"
}

//以下?tīng)顟B(tài)碼含義與官方SDK一致
resultStatus = 9000,支付成功
resultStatus = 8000,正在處理中伴郁,支付結(jié)果未知(有可能已經(jīng)支付成功),請(qǐng)查詢商戶訂單列表中訂單的支付狀態(tài)
resultStatus = 4000,支付失敗
resultStatus = 5000,重復(fù)請(qǐng)求
resultStatus = 6001,用戶中途取消
resultStatus = 6002,網(wǎng)絡(luò)連接出錯(cuò)
resultStatus = 6004,支付結(jié)果未知(有可能已經(jīng)支付成功)焊傅,請(qǐng)查詢商戶訂單列表中訂單的支付狀態(tài)

小結(jié):

XHPayKit的實(shí)現(xiàn)非常簡(jiǎn)單,感興趣的同學(xué)可以下載下來(lái)研究下支付時(shí)APP間通訊.
代碼地址:https://github.com/CoderZhuXH/XHPayKit

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末狐胎,一起剝皮案震驚了整個(gè)濱河市握巢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌溅话,老刑警劉巖飞几,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件循狰,死亡現(xiàn)場(chǎng)離奇詭異券勺,居然都是意外死亡灿里,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)儒拂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人见转,你說(shuō)我怎么就攤上這事蒜哀。” “怎么了乘客?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵易核,是天一觀的道長(zhǎng)牡直。 經(jīng)常有香客問(wèn)我碰逸,道長(zhǎng)岳链,這世上最難降的妖魔是什么掸哑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任苗分,我火速辦了婚禮厌蔽,結(jié)果婚禮上奴饮,老公的妹妹穿的比我還像新娘择浊。我一直安慰自己琢岩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布担孔。 她就那樣靜靜地躺著吃警,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啄育。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,146評(píng)論 1 297
  • 那天挑豌,我揣著相機(jī)與錄音安券,去河邊找鬼浮毯。 笑死完疫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的债蓝。 我是一名探鬼主播壳鹤,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饰迹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼啊鸭!你這毒婦竟也來(lái)了锹淌?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钟些,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體篙耗,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迫筑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宗弯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯燃。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒙保,靈堂內(nèi)的尸體忽然破棺而出曲伊,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布坟募,位于F島的核電站,受9級(jí)特大地震影響邑狸,放射性物質(zhì)發(fā)生泄漏懈糯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一单雾、第九天 我趴在偏房一處隱蔽的房頂上張望赚哗。 院中可真熱鬧,春花似錦硅堆、人聲如沸屿储。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)够掠。三九已至,卻和暖如春茄菊,著一層夾襖步出監(jiān)牢的瞬間疯潭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工面殖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竖哩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓脊僚,卻偏偏與公主長(zhǎng)得像相叁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辽幌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 用到的組件 1增淹、通過(guò)CocoaPods安裝 2、第三方類(lèi)庫(kù)安裝 3舶衬、第三方服務(wù) 友盟社會(huì)化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 14,613評(píng)論 1 180
  • 家鄉(xiāng)的麥苗埠通, 在這寒冷的冬季; 陽(yáng)光灑落那些溫暖逛犹, 留下深沉的青綠端辱; 白楊樹(shù)枝頭,有鳥(niǎo)兒 響起清脆的歌聲虽画; 它們?cè)?..
    曉的云兒閱讀 142評(píng)論 0 0
  • 世界上有一條很長(zhǎng)很美的路码撰,叫做夢(mèng)想渗柿;還有一堵很高很硬的墻,叫做現(xiàn)實(shí);翻越那堵墻朵栖,叫做堅(jiān)持颊亮;推倒那堵墻,叫做突破陨溅;堅(jiān)...
    半樸園閱讀 216評(píng)論 0 0
  • 版權(quán)信息 文章版權(quán)更好時(shí)代原創(chuàng)出品 執(zhí)筆作者楊一方(已簽約) 正文字?jǐn)?shù)1163字 閱讀時(shí)間3分鐘 首發(fā)日期2017...
    更好時(shí)代閱讀 354評(píng)論 0 1
  • 漸入冬季门扇,先生瞅著校園河岸的樹(shù)木紛紛被砍落了一地枯葉雹有,只剩下赤條條的枝頭靜待明年?yáng)|山再起。無(wú)懼風(fēng)雨的垂釣者怡然自得...
    賤金屬閱讀 132評(píng)論 0 0