支付寶是第三方支付平臺(tái)锚赤,簡單來說就是協(xié)調(diào)客戶题翻,商戶,銀行三者關(guān)系的方便平臺(tái)
使用支付寶進(jìn)行一個(gè)完整的支付功能平夜,大致有以下步驟:
a與支付寶進(jìn)行簽約蝶棋,獲得商戶ID(partner)和賬號ID(seller)
b下載相應(yīng)的公鑰私鑰文件(加密簽名用)
c下載支付寶SDK
d生成訂單信息
e調(diào)用支付寶客戶端,有支付寶客戶端跟支付寶安全服務(wù)器打交道
f支付完畢后返回支付結(jié)果給客戶端和服務(wù)器
支付功能的實(shí)現(xiàn)
有兩種方式:
1支付寶的應(yīng)用可以 用url直接連接到
支付寶的官網(wǎng) (當(dāng)然后臺(tái)是要進(jìn)行處理的)
2第二種就是添加支付寶的第三方了 首先 下載支付寶的demo
支付寶的demo一般的常見問題解決
1 No architecuturesto compilefor(ONLY_ACTIVE_ARCH =YES, active arch = x86_64,VALID_ARCHS = i386)
出現(xiàn)這樣的問題一般是
將64位編譯進(jìn)去就能解決了(這個(gè)問題只要你下載的是最新的demo一般很少見了 )
解決方案:
targets
-> Architectures下面的Valid Architectures添加上arm64
2將支付寶的第三方添加到項(xiàng)目中的時(shí)候 有時(shí) 會(huì)出現(xiàn)openssl文件中的.h文件報(bào)錯(cuò)
說此文件不能被找到出現(xiàn)這樣的問題是 的原因一般是添加的路徑 不對
解決方案:
點(diǎn)擊項(xiàng)目名稱忽妒,點(diǎn)擊“Build Settings”選項(xiàng)卡玩裙,在搜索框中,以關(guān)鍵字“search”搜索段直,對“Header Search Paths”增加頭文件路徑:$(SRCRCOT)/項(xiàng)目名稱 設(shè)置一下路徑 一般都能解決吃溅。
3? Cannot findinterface declarationfor"NSObject", supercalss of 'Base64'
解決方案打開報(bào)錯(cuò)的文件,增加頭文件
#import
基本上支付寶中的demo里面的問題一般都會(huì)得到解決鸯檬。然后
看著demo跟實(shí)際的項(xiàng)目結(jié)合一下就ok了
正式開始支付寶教程:
1將需要的文件决侈,靜態(tài)庫等拖入工程中,這里有:include喧务,libs赖歌,Utilities,libcrypto.a功茴,libssl.a文件
2添加 庫
Linked
FrameworksandLibraries中 添加
libssl.a
libcrypto.a ? SystemConfiguration.framework
AlipaySDK.framework
3如果商戶要在某個(gè)文件中使用給支付寶的SDK類庫庐冯,需要增加引用頭文件
#import"Order.h"
#import"DataSigner.h"
#import
4后面的基本上都是 按照官方demo寫的
接口調(diào)用步驟:
1.封裝訂單模型將商品信息賦予AlixPayOrder的成員變量
Order *order =
[[Order alloc] init];
應(yīng)用注冊scheme,在項(xiàng)目的info.plist定義URL types
NSString *appScheme =@"zhifu";
生成訂單描述
NSString *orderSpec =
[order description];
2.簽名:獲取私鑰并將商戶信息簽名,外部商戶可以根據(jù)情況存放私鑰和簽名,只需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
idsigner
= CreateRSADataSigner(@“私鑰key”);
NSString
*signedString = [signer signString:orderSpec];
傳入訂單描述
進(jìn)行 簽名
NSString
*signedString = [signer signString:orderSpec];
3.生成訂單字符串
NSString *orderString= [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderSpec,signedString,@"RSA"];
4.調(diào)用支付接口
[[AlipaySDK
defaultService] payOrder:orderString fromScheme:appScheme
callback:^(NSDictionary *resultDic) { }];