支付寶是第三方支付平臺(tái),簡(jiǎn)單來說就是協(xié)調(diào)客戶驻呐,商戶碴犬,銀行三者關(guān)系的方便平臺(tái)
使用支付寶進(jìn)行一個(gè)完整的支付功能,大致有以下步驟:
a 與支付寶進(jìn)行簽約按傅,獲得商戶ID(partner)和賬號(hào)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 architecutures to compile for (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)這樣的問題是 的原因一般是添加的路徑 不對(duì)
解決方案:
點(diǎn)擊項(xiàng)目名稱,點(diǎn)擊“Build Settings”選項(xiàng)卡唯绍,在搜索框中拼岳,以關(guān)鍵字“search”搜索,對(duì)“Header Search Paths” 增加頭文件路徑:$(SRCRCOT)/項(xiàng)目名稱 設(shè)置一下路徑 一般都能解決况芒。
3 ?Cannot find interface declaration for "NSObject", supercalss of 'Base64'
解決方案 ? 打開報(bào)錯(cuò)的文件惜纸,增加頭文件
#import <Foundation/Foundation.h>
基本上支付寶中的demo 里面的問題一般都會(huì)得到解決。然后 看著demo 跟實(shí)際的項(xiàng)目結(jié)合一下就ok 了
正式開始 ?支付寶教程:
(因?yàn)樯暾?qǐng)的工作不是我做的 所以就此過程就略了 )
1 將需要的文件绝骚,靜態(tài)庫(kù)等拖入工程中耐版,這里有:include,libs压汪,Utilities粪牲,libcrypto.a,libssl.a文件
2 添加 庫(kù) ?
Linked Frameworks and Libraries ?中 添加
libssl.a ? libcrypto.a ? SystemConfiguration.framework ?
AlipaySDK.framework
3 ?如果商戶要在某個(gè)文件中使用給支付寶的SDK 類庫(kù)止剖,需要增加引用頭文件
#import "Order.h"
#import "DataSigner.h"
#import <AlipaySDK/AlipaySDK.h>
?4 ?后面的基本上都是 按照官方demo寫的
接口調(diào)用步驟:
1.封裝訂單模型將商品信息賦予AlixPayOrder的成員變量
Order *order = [[Order alloc] init];
// 應(yīng)用注冊(cè)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) { }];