轉(zhuǎn) iOS支付寶支付接入的幾個(gè)坑—以及解決辦法

因?yàn)榻陧?xiàng)目中需要接入支付寶支付功能裹芝,自己也爬了很多的坑,所以做了一下這邊文章供大家學(xué)習(xí)參考娜汁,遠(yuǎn)離爬坑嫂易,文章主要講到以下五部分:

一、支付寶開放平臺(tái)創(chuàng)建應(yīng)用

二掐禁、簽約移動(dòng)支付功能

三怜械、接入支付前的準(zhǔn)備工作附準(zhǔn)備工作中遇到難題的解決方法

四、配置官方Demo附BUG解決方法

五傅事、集成項(xiàng)目宫盔,具體代碼編寫、

本文為本人學(xué)習(xí)記錄筆記享完,如需轉(zhuǎn)載灼芭,請(qǐng)注明出處@iOSlyon

支付寶開放平臺(tái)創(chuàng)建應(yīng)用登錄支付寶開放平臺(tái)

管理中心創(chuàng)建應(yīng)用

1. 應(yīng)用創(chuàng)建完成后點(diǎn)擊查看我的應(yīng)用詳情進(jìn)行移動(dòng)支付功能的簽約

或者

2.進(jìn)入支付寶商家服務(wù)頁(yè)面"https://b.alipay.com/newIndex.htm"選擇移動(dòng)支付功能進(jìn)行簽約

簽約過程以下以簽約移動(dòng)支付功能為例子

商戶簽約審核簽約審核具體步驟請(qǐng)參見支付寶官方文檔簽約與審核

或者

??????? 下列圖示

填寫簽約信息

填寫簽約信息

上圖的附件文檔因?yàn)橛写挝臋n錯(cuò)誤導(dǎo)致審核不通過,所以以下貼出審核成功的文檔供大家參考

Paste_Image.png

上述簽約步驟審核通過之后就可以開始集成工作了

接入前準(zhǔn)備工作

第一步般又、商戶密鑰管理密鑰作用

2.1.生成步驟

2.2.上傳步驟

這個(gè)步驟完全可以看官方文檔中的操作彼绷,官方文檔寫得很詳細(xì)巍佑,但是其中有幾點(diǎn)需要說(shuō)明:

一、說(shuō)明問題

上傳密鑰步驟不知道怎么上傳寄悯?因?yàn)槊荑€是pem文件萤衰,但是上傳的是字符串文本。

一猜旬、解決方法

將生成的pem文件復(fù)制一份到桌面脆栋,改成Txt文件打開即可獲取我們需要的字符串,記住當(dāng)我們引用這兩個(gè)長(zhǎng)的字符串時(shí)洒擦,字符串不能包括椿争,換行,空格熟嫩,以及其他誤加的字符秦踪,所以復(fù)制的時(shí)候一定要小心。

二掸茅、說(shuō)明問題

Mac 自帶openssl環(huán)境椅邓,不用安裝,直接終端輸入openssl就可以昧狮。

配置官方Demo代碼部分下載Demo

支付寶官方Demo中需要配置商戶的資料(如下)

//開放平臺(tái)登錄https://openhome.alipay.com/platform/appManage.htm//管理中心獲取APPID#defineMXAlipayAPPID? ? ? @"請(qǐng)配置你的AppID"http://支付寶私鑰(用戶自主生成景馁,使用pkcs8格式的私鑰)#defineMXAlipayPrivateKey? @"請(qǐng)配置你的支付寶pkcs8私鑰"

配置以上數(shù)據(jù)后,真機(jī)編譯逗鸣,遇到以下問題

輸出錯(cuò)誤信息如配置信息中的私鑰(即上述PartnerPrivKey)使用的不適pkcs8的私鑰的話裁僧,則會(huì)報(bào)以下錯(cuò)誤

rsa_private read error :privatekeyisNULL

解決方法:

方法一將私鑰轉(zhuǎn)成PKCS8替換一下原私鑰即可轉(zhuǎn)換方法如下

( PHP服務(wù)端語(yǔ)言讀取私鑰不需要PKCS8轉(zhuǎn)換)

OpenSSL> genrsa -outrsa_private_key.pem1024#生成私鑰OpenSSL> pkcs8 -topk8 -inform PEM -inrsa_private_key.pem-outform PEM -nocrypt -outrsa_private_key_pkcs8.pem#Java開發(fā)者需要將私鑰轉(zhuǎn)換成PKCS8格式OpenSSL> rsa -inrsa_private_key.pem-pubout -outrsa_public_key.pem#生成公鑰OpenSSL> exit#退出OpenSSL程序

方法二檢查PID是否寫正確

接下來(lái)重新運(yùn)行,上述錯(cuò)誤已經(jīng)解決,但遇到新問題如下圖

彈框顯示

解決方法: 可參考百度中查到的結(jié)果上述問題解決方法

問題源頭是因?yàn)樗借€跟商戶上傳的公鑰不匹配

處理完上述問題之后慕购,就可以進(jìn)行支付操作了

測(cè)試Demo具體操作

1.創(chuàng)建一個(gè)AlipayDemoTest項(xiàng)目

2.新建一個(gè)AliSDK文件夾,提取SDK包中以下文件到此文件夾里茬底,

支付寶所需導(dǎo)入SDK文件

3.編譯項(xiàng)目沪悲,會(huì)出現(xiàn)以下問題:

1)"Unknown type name ‘NSString‘ "或"Unknown type name ‘NSData‘ "

報(bào)錯(cuò)信息

這是因?yàn)槿鄙貴oundation類庫(kù)和UIKit類庫(kù),支付寶Demo中之所以沒有出現(xiàn)此錯(cuò)誤阱表,是因?yàn)樵?pch文件中導(dǎo)入過這些類庫(kù)

解決辦法:只需要在出現(xiàn)錯(cuò)誤的文件中導(dǎo)入這些類庫(kù)即可

導(dǎo)入庫(kù)

2)‘openssl/asn1.h‘ file not found

報(bào)錯(cuò)信息

這是openssl文件夾頭文件鏈接問題殿如,如果openssl文件夾隨意拉進(jìn)項(xiàng)目中,即使添加頭文件鏈接最爬,也可能解決不了此問題涉馁,

這也是一開始就將所需要的文件放到一個(gè)新建文件夾中再添加到項(xiàng)目中的原因。

解決辦法:

Targets->Build Settings->Header Search Path中添加AliPaySDK文件夾的路徑

4.編譯項(xiàng)目爱致,會(huì)出現(xiàn)以下問題:

Paste_Image.png

解決方法:在xcode中烤送,點(diǎn)擊項(xiàng)目名,選擇"target"->"Link Binary With Libraries"添加依賴庫(kù)糠悯。

Paste_Image.png

編輯程序帮坚,已經(jīng)可以成功編譯了妻往,接下來(lái)就是集成代碼了

#import"AppDelegate.h"#import@interfaceAppDelegate()@end@implementationAppDelegate- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {// Override point for customization after application launch.returnYES;}- (BOOL)application:(UIApplication*)application? ? ? ? ? ? openURL:(NSURL*)url? sourceApplication:(NSString*)sourceApplication? ? ? ? annotation:(id)annotation{if([url.hostisEqualToString:@"safepay"]) {//跳轉(zhuǎn)支付寶錢包進(jìn)行支付,處理支付結(jié)果[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary*resultDic) {NSLog(@"result = %@",resultDic);? ? ? ? }];? ? }returnYES;}//NOTE:9.0以后使用新API接口- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options{if([url.hostisEqualToString:@"safepay"]) {//跳轉(zhuǎn)支付寶錢包進(jìn)行支付试和,處理支付結(jié)果[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary*resultDic) {NSLog(@"result = %@",resultDic);? ? ? ? }];? ? }returnYES;}@end

#import"ViewController.h"#import"Order.h"#import"DataSigner.h"#import@interfaceViewController()@end@implementationViewController- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event{/*=========================================================*//*====客戶端調(diào)用支付寶支付(實(shí)際操作請(qǐng)放到服務(wù)端)=================*//*=========================================================*///AppId和PrivateKey沒有配置下的提示if(? [MXAlipayAPPID length] ==0||[MXAlipayPrivateKey length] ==0||[MXAlipayAPPID isEqualToString:@"請(qǐng)配置你的AppID"]? ? ? ? ||[MXAlipayPrivateKey isEqualToString:@"請(qǐng)配置你的支付寶pkcs8私鑰"])? ? {UIAlertView*alert = [[UIAlertViewalloc] initWithTitle:@"提示"message:@"缺少appId或者私鑰讯泣。"delegate:selfcancelButtonTitle:@"確定"otherButtonTitles:nil];? ? ? ? [alert show];return;? ? }//商品價(jià)格NSString*price = [NSStringstringWithFormat:@"%.2f",0.01];//將商品信息賦予AlixPayOrder的成員變量Order* order? ? = [Order new];? ? order.app_id= MXAlipayAPPID;//NOTE:app_id設(shè)置order.method= MXUrlAlipay;//NOTE:支付接口名稱order.charset=@"utf-8";//NOTE:參數(shù)編碼格式NSDateFormatter* formatter = [NSDateFormatternew];? ? [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];? ? order.timestamp= [formatter stringFromDate:[NSDatedate]];//NOTE:當(dāng)前時(shí)間點(diǎn)order.version=@"1.0";//NOTE:支付版本order.sign_type=@"RSA";//NOTE:sign_type設(shè)置//NOTE:商品數(shù)據(jù)order.biz_content= [BizContent new];? ? order.biz_content.body=@"我是測(cè)試數(shù)據(jù)";? ? order.biz_content.subject=@"1";? ? order.biz_content.out_trade_no= [selfgenerateTradeNO];//訂單ID(由商家自行制定)order.biz_content.timeout_express=@"30m";//超時(shí)時(shí)間設(shè)置order.biz_content.total_amount= price;//商品價(jià)格//將商品信息拼接成字符串NSString*orderInfo? ? ? ? = [order orderInfoEncoded:NO];NSString*orderInfoEncoded? = [order orderInfoEncoded:YES];NSLog(@"orderSpec = %@",orderInfo);//NOTE:獲取私鑰并將商戶信息簽名,外部商戶的加簽過程請(qǐng)務(wù)必放在服務(wù)端阅悍,防止公私鑰數(shù)據(jù)泄露好渠;//? ? ? 需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncodeid signer = CreateRSADataSigner(MXAlipayPrivateKey);NSString*signedString = [signer signString:orderInfo];//NOTE:如果加簽成功节视,則繼續(xù)執(zhí)行支付if(signedString !=nil) {//應(yīng)用注冊(cè)scheme,在AliSDKDemo-Info.plist定義URL typesNSString*appScheme = MXURLScheme;//NOTE:將簽名成功字符串格式化為訂單字符串,請(qǐng)嚴(yán)格按照該格式NSString*orderString = [NSStringstringWithFormat:@"%@&sign=%@",? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? orderInfoEncoded, signedString];//NOTE:調(diào)用支付結(jié)果開始支付[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary*resultDic) {NSLog(@"reslut = %@",resultDic);? ? ? ? }];? ? }}#pragma mark - Private Method//==============產(chǎn)生隨機(jī)訂單號(hào)==============+ (NSString*)generateTradeNO{staticintkNumber =15;NSString*sourceStr =@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";NSMutableString*resultStr = [[NSMutableStringalloc] init];? ? srand((unsigned)time(0));for(inti =0; i < kNumber; i++)? ? {unsignedindex = rand() % [sourceStr length];NSString*oneStr = [sourceStr substringWithRange:NSMakeRange(index,1)];? ? ? ? [resultStr appendString:oneStr];? ? }returnresultStr;}@end

這里也可以下載我自己搭建的DEMO

已解決所有錯(cuò)誤

下載后替換掉MXAlipayConfig.h中的配置參數(shù)即可運(yùn)行,前提是你的參數(shù)不能錯(cuò)

使用方法可以參考Demo中的ReadMe文件

正式接入階段

服務(wù)端

負(fù)責(zé)生成訂單及簽名拳锚,及接受支付異步通知。

客戶端

負(fù)責(zé)使用服務(wù)端傳來(lái)的訂單信息調(diào)用支付寶支付接口肴茄,及根據(jù)SDK同步返回的支付結(jié)果展示結(jié)果頁(yè)晌畅。

服務(wù)端接入

私鑰必須放在服務(wù)端,簽名過程必須放在服務(wù)端寡痰。

集成支付寶后打包ipa抗楔,報(bào)如下一系列警告:

Paste_Image.png

解決方法:

1) Go to Build Settings -> Build Options -> Debug Information Format

2) Change the Debug setting from "DWARF with dSYM File" to "DWARF"

3) Leave the Release setting at "DWARF with dSYM File"

AlipaySDK.framework 是先 build 的靜態(tài) lib 嗅钻,然后轉(zhuǎn)成的 framework 盔腔,但是在 build 靜態(tài) lib 時(shí) CLANG_ENABLE_MODULES 沒有被設(shè)置成 disabled 断箫。

文/lyoniOS(簡(jiǎn)書作者)

原文鏈接:http://www.reibang.com/p/b3063678c462

著作權(quán)歸作者所有破婆,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)冠句,并標(biāo)注“簡(jiǎn)書作者”竟痰。

頂?:? 安卓的私鑰不需要轉(zhuǎn)pcks8潮孽,ios的才需要

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末解总,一起剝皮案震驚了整個(gè)濱河市晓铆,隨后出現(xiàn)的幾起案子勺良,更是在濱河造成了極大的恐慌,老刑警劉巖骄噪,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尚困,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡链蕊,警方通過查閱死者的電腦和手機(jī)事甜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滔韵,“玉大人逻谦,你說(shuō)我怎么就攤上這事∨泸撸” “怎么了邦马?”我有些...
    開封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我勇婴,道長(zhǎng)忱嘹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任耕渴,我火速辦了婚禮拘悦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘橱脸。我一直安慰自己础米,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開白布添诉。 她就那樣靜靜地躺著屁桑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栏赴。 梳的紋絲不亂的頭發(fā)上蘑斧,一...
    開封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音须眷,去河邊找鬼竖瘾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛花颗,可吹牛的內(nèi)容都是我干的捕传。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼扩劝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼庸论!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起棒呛,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤聂示,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后簇秒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鱼喉,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年宰睡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片气筋。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拆内,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宠默,到底是詐尸還是另有隱情麸恍,我是刑警寧澤,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站抹沪,受9級(jí)特大地震影響刻肄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜融欧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一敏弃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧噪馏,春花似錦麦到、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至刺桃,卻和暖如春粹淋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑟慈。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工桃移, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人封豪。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓谴轮,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吹埠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子第步,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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

  • 文章主要講到以下五部分: 一、支付寶開放平臺(tái)創(chuàng)建應(yīng)用 二缘琅、簽約移動(dòng)支付功能 三粘都、接入支付前的準(zhǔn)備工作附準(zhǔn)備工作中遇...
    sillen閱讀 17,903評(píng)論 1 10
  • 因?yàn)榻陧?xiàng)目中需要接入支付寶支付功能,自己也爬了很多的坑刷袍,所以做了一下這邊文章供大家學(xué)習(xí)參考翩隧,遠(yuǎn)離爬坑,文章主要講...
    lyonLiu閱讀 36,695評(píng)論 19 151
  • 這些天公司讓做支付寶功能呻纹,不的不說(shuō)小的也是第一次搞這個(gè)東西堆生。所以遇到了不少坑,求助了多方大神雷酪,還有前輩們?cè)诰W(wǎng)上留下...
    L是個(gè)小碼農(nóng)閱讀 6,530評(píng)論 2 23
  • “蕭文淑仆,我們又見面了!” “是啊哥力,我們又見面了蔗怠,林峰” 回 憶 :
    櫻蘭閱讀 136評(píng)論 0 1
  • 落花紅妝憑欄泊墩弯, 杯中殘存獨(dú)落座。 鳳簫聲動(dòng)玉壺轉(zhuǎn)寞射, 一腮春雨風(fēng)煙默渔工。
    菀婠閱讀 485評(píng)論 2 6