国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS微信支付開(kāi)發(fā)案例

2020-07-26 03:15:24
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

微信支付有很多坑的,官方提供的文檔一點(diǎn)都不全面,而且demo也比較”羞澀”難懂。很多注意的細(xì)節(jié)都沒(méi)有體現(xiàn)出來(lái),走了很多彎路。于是,系統(tǒng)的開(kāi)發(fā)流程如下。(完整的demo附在博客最后面)這里面包括微信支付開(kāi)發(fā)和支付寶開(kāi)發(fā)調(diào)用客戶端的兼容處理。(兩次簽名放在移動(dòng)端,博客中沒(méi)提到?jīng)]安裝微信客戶端的情況,也很簡(jiǎn)單[WXApi sendReq:request]調(diào)用這個(gè)方法的返回值為0即可判斷。)

一、環(huán)境配置

1、首先是https協(xié)議訪問(wèn),在plist設(shè)置白名單

這里寫(xiě)圖片描述

2、當(dāng)你工程中有微信分享、收藏、支付、登錄等,需要在“Info.plist”里增加如下代碼(LSApplicationQueriesSchemes)

這里寫(xiě)圖片描述

3、解決bitcode編譯不過(guò)問(wèn)題

這里寫(xiě)圖片描述

4、設(shè)置URL types

這里寫(xiě)圖片描述

5、導(dǎo)入SDK(可從微信官方的demo移植過(guò)來(lái))

這里寫(xiě)圖片描述

6、導(dǎo)入系統(tǒng)依賴庫(kù)

這里寫(xiě)圖片描述

7、特別要注意的是

微信支付是以分為單位的,也就是說(shuō),如果你支付金額是保留兩位小數(shù),支付的金額必須*100后再傳給微信支付平臺(tái),其他的依次類(lèi)推。

二、代碼開(kāi)發(fā)

1、在程序入口(即applegate.m)需要進(jìn)行的操作

這里寫(xiě)圖片描述

2、增加如下代理方法,否則不回調(diào)微信客服端(也是在delegate.m文件中)

這里寫(xiě)圖片描述

3、微信支付成功的回調(diào)函數(shù)

這個(gè)有必要說(shuō)明下,官方文檔是這樣說(shuō)明的:不能以客服端支付成功的結(jié)果就直接當(dāng)做是訂單支付成功的結(jié)果,要以服務(wù)器返回的訂單狀態(tài)為準(zhǔn),也就是說(shuō),客服端支付成功后,微信支付平臺(tái)會(huì)給服務(wù)器發(fā)送支付成功的消息,后臺(tái)修改訂單狀態(tài),重新返回給客戶端。簡(jiǎn)單就是,支付成功要發(fā)送給特定的視圖控制器(帶有微信支付功能的視圖控制器)發(fā)送通知,讓這個(gè)特定的視圖控制去請(qǐng)求服務(wù)器訂單的住狀態(tài)。這個(gè)回調(diào)函數(shù)必須寫(xiě)在delegate.m中!!!

4、特定視圖控制器的代碼(帶有微信支付功能的視圖控制器)
4.1 提交預(yù)支付訂單獲得預(yù)訂單id(這個(gè)過(guò)程必須經(jīng)過(guò)兩次簽名,分別是不帶參數(shù)簽名和攜帶參數(shù)簽名,當(dāng)然,這些方法都已經(jīng)在payRequsestHandler類(lèi)封裝好了,你只需要傳參數(shù)調(diào)用方法就可以了)這個(gè)也是點(diǎn)擊支付按鈕的動(dòng)作方法

4.2得到預(yù)支付訂單,那么就可以調(diào)微信支付的客服端(4.2和4.1代碼是連續(xù)的)


附帶sign參數(shù)簽名的獨(dú)立封裝的兩個(gè)方法,沒(méi)用payRequsestHandler封裝的方法,自己寫(xiě)的,因?yàn)橛昧顺霈F(xiàn)問(wèn)題(問(wèn)題截圖如下),先代碼截圖,后面再提供可直接復(fù)制黏貼的代碼塊
問(wèn)題截圖:(相信很多人遇到過(guò),100%是sign簽名的問(wèn)題)

這里寫(xiě)圖片描述 

方法一:

 

方法二:

這里寫(xiě)圖片描述

4.3 上面的代碼就可以完全解決微信支付問(wèn)題,剩下最后一個(gè)步驟,支付成功返回app調(diào)用delegate的-(void)onResp:(BaseResp*)resp方法,那么這里要發(fā)送通知給特定的視圖控制器,讓他去請(qǐng)求后臺(tái)的訂單狀態(tài)。這里要說(shuō)明的是,你從那個(gè)界面調(diào)的微信支付后,返回還是在原處。只是回調(diào)方法必須在delegate中,所以必須在回調(diào)方法發(fā)送成功的通知。那么要在特定的視圖控制器的視圖即將出現(xiàn)的方法中,監(jiān)聽(tīng)到這個(gè)通知,然后請(qǐng)求后臺(tái)的訂單狀態(tài)。這里需要注意的是,需要重寫(xiě)dealloc方法,移除通知。

這里寫(xiě)圖片描述

三、支付寶和微信支付的回調(diào)客戶端的代理方法的兼容處理

這里寫(xiě)圖片描述

四、demo分享地址

http://xiazai.VeVB.COm/201608/yuanma/IOSwxPay(VeVB.COm).rar

可供復(fù)制黏貼的代碼(sign簽名)

-(NSString )createMD5SingForPay:(NSString )appid_key partnerid:(NSString)partnerid_key prepayid:(NSString )prepayid_key package:(NSString )package_key noncestr:(NSString)noncestr_key timestamp:(UInt32)timestamp_key { NSMutableDictionary *signParams = [NSMutableDictionary dictionary]; [signParams setObject:appid_key forKey:@”appid”]; [signParams setObject:noncestr_key forKey:@”noncestr”]; [signParams setObject:package_key forKey:@”package”]; [signParams setObject:partnerid_key forKey:@”partnerid”]; [signParams setObject:prepayid_key forKey:@”prepayid”]; [signParams setObject:[NSString stringWithFormat:@”%u”,(unsigned int)timestamp_key] forKey:@”timestamp”];NSMutableString *contentString =[NSMutableString string]; NSArray *keys = [signParams allKeys]; //按字母順序排序 NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {return [obj1 compare:obj2 options:NSNumericSearch]; }]; //拼接字符串 for (NSString *categoryId in sortedArray) { if ( ![[signParams objectForKey:categoryId] isEqualToString:@”“] && ![[signParams objectForKey:categoryId] isEqualToString:@”sign”] && ![[signParams objectForKey:categoryId] isEqualToString:@”key”] ) { [contentString appendFormat:@”%@=%@&”, categoryId, [signParams objectForKey:categoryId]];} } //添加商戶密鑰key字段 [contentString appendFormat:@”key=%@”, @”這里填寫(xiě)商戶密鑰”]; NSString *result = [self md5:contentString]; return result;}//創(chuàng)建發(fā)起支付時(shí)的sige簽名-(NSString ) md5:(NSString )str { const char *cStr = [str UTF8String]; unsigned char result[16]= “0123456789abcdef”; CC_MD5(cStr, (CC_LONG)strlen(cStr), result); //這里的x是小寫(xiě)則產(chǎn)生的md5也是小寫(xiě),x是大寫(xiě)則md5是大寫(xiě),這里只能用大寫(xiě),微信的大小寫(xiě)驗(yàn)證很逗 return [NSString stringWithFormat: @”%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X”, result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; }//MD5 加密

微信支付下載demo:http://xiazai.VeVB.COm/201608/yuanma/iosweixinPay(VeVB.COm).rar

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 房产| 荥阳市| 丰都县| 磐安县| 秦皇岛市| 张北县| 承德县| 林西县| 景宁| 绵竹市| 陇川县| 永定县| 玉龙| 梁山县| 平利县| 阿瓦提县| 泗水县| 蒙自县| 隆德县| 阜康市| 台南县| 琼中| 阿瓦提县| 昌都县| 磴口县| 香河县| 普格县| 大余县| 巴林左旗| 康定县| 宝应县| 博客| 永康市| 逊克县| 蒙山县| 贡觉县| 鹤峰县| 武邑县| 鸡泽县| 从江县| 涟源市|