1. App支付iOS集成
按照支付寶的官方文檔就可以集成,很順利。但是有16處warning。
warning: (arm64) /Users/tommy/Desktop/Project/AliPay/Cornerstone/standard/1520_cp_record_client_release_828632/AlipaySDK4Standard/AlipaySDK/Library/UTDID.framework/UTDID(UTDIDAES.o) unable to open object file: No such file or directory
看在運行官方提供的支付寶DEMO中也會有此處的warning,所以此處等日后優(yōu)化處理。
2.組裝請求信息。
TIPS:這一步應在商戶服務端完成,商戶服務端直接將組裝和簽名后的請求串orderString傳給客戶端,客戶端直接傳給SDK發(fā)起請求。
步驟如下:
1.整合信息,將商品信息拼接成字符串。
1.appID; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//appId
2.method = “alipay.trade.app.pay";? ? ? ? //固定寫法
3.charset = "utf-8";
4.timestamp
5.version = "1.0";
6.sign_type = “RSA";? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //固定寫法
// NOTE: 商品數(shù)據(jù)
7.biz_content;
8.biz_content.body =“ ”;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //”我是測試數(shù)據(jù)”;
9.biz_content.subject = "1";
10.biz_content.out_trade_no = ‘’? ? ? ? ? ? ? //訂單ID(由商家自行制定)
11.biz_content.timeout_express = "30m"; //超時時間設(shè)置
7.total_amount? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //商品價格
例如app_id=2088421490941334&biz_content={"timeout_express":"30m","seller_id":"","product_code":"QUICK_MSECURITY_PAY","total_amount":"0.01","subject":"1","body":"我是測試數(shù)據(jù)","out_trade_no":"2W198CASQ6769ID"}&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA×tamp=2016-11-15 15:28:58&version=1.0
2. 商品信息加密
例如:
app_id=2088421490941334&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22E51W0J0WBHP5J8E%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA×tamp=2016-11-15%2015%3A45%3A22&version=1.0
3.? // NOTE: 獲取私鑰并將商戶信息簽名,需要遵循RSA簽名規(guī)范,并將簽名字符串base64編碼和UrlEncode
例如:
signedString = vUhZosbhfwep6IXN99%2BI%2FZrRj3o81%2Fy0Fh5Oxt2r4VtVgkChwye9jfMHABra%2Bija77NeHm%2FcchelshtxTkp%2B%2FRaFFC34re%2FQlW51WxFKlGMxhM%2FNRm1r42rlqtSjiOjM1vWCQ%2FQDRs837WVwKRSAb4kD7OUDcHSU6k4cMsQGGwQ%3D
4.將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式orderInfoEncoded&signedString。
app_id=2088421490941334&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22seller_id%22%3A%22%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE%22%2C%22out_trade_no%22%3A%22E51W0J0WBHP5J8E%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA×tamp=2016-11-15%2015%3A45%3A22&version=1.0&sign=vUhZosbhfwep6IXN99%2BI%2FZrRj3o81%2Fy0Fh5Oxt2r4VtVgkChwye9jfMHABra%2Bija77NeHm%2FcchelshtxTkp%2B%2FRaFFC34re%2FQlW51WxFKlGMxhM%2FNRm1r42rlqtSjiOjM1vWCQ%2FQDRs837WVwKRSAb4kD7OUDcHSU6k4cMsQGGwQ%3D
把此字符串提供給終端進行喚起。
3.配置支付寶客戶端返回url處理方法。
NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
if ([url.host isEqualToString:@"safepay"]) {
//跳轉(zhuǎn)支付寶錢包進行支付,處理支付結(jié)果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
}];
}
return YES;
}
這里要注意的是此事件openURL 會在appDelegate 多次共同調(diào)用(如微信,支付寶,微博,QQ)等,一定要做好多事件的適配。適配方式其實很簡單,通過配置的URL Schemes 就可以區(qū)分。