Ios支付寶開發(fā)流程與常見的問題

這些天公司讓做支付寶功能,不的不說小的也是第一次搞這個(gè)東西。所以遇到了不少坑,求助了多方大神,還有前輩們在網(wǎng)上留下的技術(shù)博客給解決了。為了防止世界被破壞,我決定給iOS新手的寶寶們做一個(gè)詳細(xì)的參考。由于我也是第一次寫簡書,技術(shù)還不成熟,有什么不對的地方請各位看官老爺們留下寶貴的意見。小的在這里謝過了。


接入支付寶的大致流程如下:

1.向支付寶申請, 與支付寶簽約,獲得商戶ID(partner)和賬號ID(seller)和私鑰(privateKey)

(1)生成公鑰和秘鑰的方法? 打開終端

生成私鑰pem,執(zhí)行命令?? openssl genrsa -outrsa_private_key.pem 1024


生成公鑰,執(zhí)行命令??? openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem


//如果服務(wù)器端已經(jīng)生成公私密鑰,那么獲取他們的公私密鑰文件,然后編碼,然后將私鑰發(fā)給服務(wù)器,然后開始調(diào)試。

將RSA私鑰轉(zhuǎn)換成PKCS8格式,命令執(zhí)行openssl pkcs8 -topk8 -inform PEM -in

rsa_private_key.pem -outform PEM -nocrypt? PHP服務(wù)端語言讀取私鑰不需要PKCS8轉(zhuǎn)換。

2. 下載支付寶的demo

3. 生成訂單,簽名加密

4.調(diào)用支付寶客戶端,由支付寶客戶端跟支付寶安全服務(wù)器打交道

5.支付完畢后,支付寶客戶端會(huì)自動(dòng)跳回到原來的應(yīng)用程序

6.在原來的應(yīng)用程序中顯示支付結(jié)果給用戶看


下面開始正式的接入支付寶,假設(shè)你已經(jīng)獲得了 獲得商戶ID(partner- 一般以2088開頭)和賬號ID(seller)和私鑰(privateKey)

1.先將支付寶demo 中把下圖的文件拷貝到工程中

這個(gè)步驟值得注意的是,不要直接拖拽文件拷貝的工程,這樣你的路徑會(huì)出錯(cuò)。

解決方法先拷貝到一個(gè)文件夾中,然后在拷貝到工程中。

2. 添加依賴庫,在Build Phases選項(xiàng)卡的Link Binary With Libraries中

值得注意的是

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

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


可能遇到的困難

1.

不要慌張看到這么多錯(cuò)誤,這是阿里比較坑的地方,原因是缺少

#import<UIKit/UIKit.h>? 和 #import<Foundation/Foundation.h> 這兩個(gè)頭文件在

支付寶中AliSDKDemo-Prefix.pch 這個(gè)文件里添加了頭文件,我們只需要添加上即可。


問題2? 找不不這個(gè)文件


解決:Build Settings --> Search Paths --> Header Search paths : $(SRCROOT)/支付寶的文件路徑

例如:

問題3

遇到這樣的問題是因?yàn)樽约捍中亩鴮?dǎo)致,沒有添加下圖的這兩個(gè)文件



接下來我們開始生成訂單 (必須按照要求嚴(yán)格配置訂單,必須嚴(yán)格,必須嚴(yán)格,重要的事情說三遍)

//1.添加寫partner/seller/privateKey,簽約后獲得

NSString *partner =@"partner";

NSString*seller =@"seller";

NSString*privateKey =@"privateKey";

2.1.創(chuàng)建訂單Order *order =[[Order alloc] init];

order.partner = partner;

order.sellerID = seller;

order.outTradeNO = [self generateTradeNO]; //訂單ID(由商家自行制定)

order.subject = @“”; //商品標(biāo)題

order.body = @“”; //商品描述

order.totalFee = [NSString stringWithFormat:@"0.01"]; //商品價(jià)格

order.notifyURL =? @""; //回調(diào)URL

order.service = @"mobile.securitypay.pay";

order.paymentType = @"1";

order.inputCharset = @"utf-8";

order.itBPay = @"30m";

order.showURL = @"m.alipay.com";

//應(yīng)用注冊scheme,在AlixPayDemo-Info.plist定義URL types? ?

NSString *appScheme = @"alisdkdemo";? ? ? ?

//將商品信息拼接成字符串? ? NSString *orderSpec = [order description];? ? NSLog(@"orderSpec = %@",orderSpec);? ? ??

//獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode

idsigner = CreateRSADataSigner(privateKey);

NSString *signedString = [signer signString:orderSpec];

//將簽名成功字符串格式化為訂單字符串,請嚴(yán)格按照該格式

NSString *orderString = nil;

if (signedString != nil) {

orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec, signedString, @"RSA"];

[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {

NSLog(@"reslut = %@",resultDic);

}];

}

上面為 生成訂單和 簽名的代碼。

值得注意的是官方推薦,一般生成訂單和簽名,獲得商戶ID(partner- 一般以2088開頭)和賬號ID(seller)和私鑰(privateKey) 都應(yīng)該放在后臺進(jìn)行,這樣極大方面的保護(hù)了金錢安全。我們只需要負(fù)責(zé)調(diào)用支付寶的回調(diào)方法,來處理結(jié)果。


配置完成后,我們快點(diǎn)興奮的來檢測一下,誒,好像遇到什么問題了。

我擦嘞,好不容易配置好了,可以測試了,他竟然又出現(xiàn)了錯(cuò)誤

???????????? 顯示系統(tǒng)繁忙,請稍后再試(ALI10)

這個(gè)問題很好解釋,字面意思就是錯(cuò)了唄。 解決方法

1. 你配置的秘鑰有問題,由于調(diào)用支付寶接口的那個(gè)平臺,他的秘鑰可能過期導(dǎo)致,或者是一些其他的協(xié)議出現(xiàn)了問題。

2.請聯(lián)系客服(不過我沒有試過)


解決了上面的問題我們在來測試下,oh 買噶的。 又遇到了問題,我也是醉了。

交易訂單處理失敗,請稍后再試。(ALI59)

小伙子們不要慌張,這個(gè)問題也是我們粗心而導(dǎo)致的,是因?yàn)槲覀兩傻挠唵斡袉栴}。解決方案:

1. 認(rèn)真核對配置訂單的信息,認(rèn)真核對,認(rèn)真核對,認(rèn)真核對。一定要認(rèn)真,也許是我們訂單商品名稱錯(cuò)了,訂單描述錯(cuò)了,拼接的價(jià)錢錯(cuò)了,要記住他們都是 NSString 類型。


以上就是本次的內(nèi)容,不的不說的是支付寶太任性了,我也是爬過了都少個(gè)坑才總結(jié)的經(jīng)驗(yàn)。以上的內(nèi)容也并非我自己解決的,查看了很多技術(shù)博客然后自己歸納整編到一起的,我是這方面的菜鳥,我的格言就是——站在巨人的肩膀上編程。謝謝前輩們開創(chuàng)的經(jīng)驗(yàn)道路,讓我們后輩繼承。


?

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

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

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