一吻贿、支付寶支付要注意的問題:
導入AlipaySDk,預編譯一下串结,這是會發(fā)現(xiàn)會有好多錯誤:
錯誤一:
解決辦法:
這個是要添加pch文件并配置
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
錯誤二:
解決辦法:在Header Search Paths 配置路徑
錯誤三:
添加依賴庫:
白名單配置:info.plist
iOS 9系統(tǒng)策略更新,應用需要在“Info.plist”中將要使用的URL Schemes列為白名單舅列,才可正常檢查其他應用是否安裝肌割。
各個平臺白名單說明:
http://blog.csdn.net/hou3035/article/details/50843217
URL Types配置:
特別注意:
/**
重要說明
privateKey等數(shù)據(jù)嚴禁放在客戶端,加簽過程務必要放在服務端完成帐要;
防止商戶私密數(shù)據(jù)泄露把敞,造成不必要的資金損失,及面臨各種安全風險榨惠;
*/
/*
*生成訂單信息及簽名
*/
//將商品信息賦予AlixPayOrder的成員變量
Order* order = [Order new];
// NOTE: app_id設置
order.app_id = appID;
// NOTE: 支付接口名稱
order.method = @"alipay.trade.app.pay";
// NOTE: 參數(shù)編碼格式
order.charset = @"utf-8";
// NOTE: 當前時間點
NSDateFormatter* formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
order.timestamp = [formatter stringFromDate:[NSDate date]];
// NOTE: 支付版本
order.version = @"1.0";
// NOTE: sign_type 根據(jù)商戶設置的私鑰來決定
order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
// NOTE: 商品數(shù)據(jù)
order.biz_content = [BizContent new];
order.biz_content.body = @"我是測試數(shù)據(jù)";
order.biz_content.subject = @"1";
order.biz_content.out_trade_no = [self generateTradeNO]; //訂單ID(由商家自行制定)
order.biz_content.timeout_express = @"30m"; //超時時間設置
order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品價格
//將商品信息拼接成字符串
NSString *orderInfo = [order orderInfoEncoded:NO];
NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
NSLog(@"orderSpec = %@",orderInfo);
// NOTE: 獲取私鑰并將商戶信息簽名奋早,外部商戶的加簽過程請務必放在服務端盛霎,防止公私鑰數(shù)據(jù)泄露;
// 需要遵循RSA簽名規(guī)范耽装,并將簽名字符串base64編碼和UrlEncode
NSString *signedString = nil;
RSADataSigner* signer = [[RSADataSigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
if ((rsa2PrivateKey.length > 1)) {
signedString = [signer signString:orderInfo withRSA2:YES];
} else {
signedString = [signer signString:orderInfo withRSA2:NO];
}
// NOTE: 如果加簽成功摩渺,則繼續(xù)執(zhí)行支付
if (signedString != nil) {
//應用注冊scheme,在AliSDKDemo-Info.plist定義URL types
NSString *appScheme = @"alisdkdemo";
// NOTE: 將簽名成功字符串格式化為訂單字符串,請嚴格按照該格式
NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
orderInfoEncoded, signedString];
二、微信支付要注意的問題:
1.白名單剂邮、URL Types配置問題和支付寶一樣摇幻,不再說明。
2.app注冊微信crash挥萌,代碼如下:
[WXApi registerApp:appId withDescription:description];
解決方案:Targets -> Bulid setting -> Other Linker Flags
3.依賴庫在支付寶中已經(jīng)說明绰姻。
4.和支付寶不一樣,微信如果沒有安裝是不會跳轉(zhuǎn)到微信網(wǎng)頁支付的引瀑,支付寶就不存在這個問題狂芋,所以微信在調(diào)起支付的時候要判斷是否已經(jīng)安裝微信。
if([WXApi isWXAppInstalled])
{
PayReq *req = [[PayReq alloc] init];
req.openID = appId;
req.partnerId = partnerId;
req.prepayId = prepayId;
req.package = package;
req.nonceStr = nonceStr;
req.timeStamp = (UInt32)timeStamp.integerValue;
req.sign = sign;
[WXApi sendReq:req];
}
else
{
if(self.WXPayResponseBlock)
{
self.WXPayResponseBlock(-3, @"未安裝微信");
}
}
字段說明:
@param appId 微信開放平臺審核通過的應用APPID
@param partnerId 微信支付分配的商戶號
@param prepayId 微信生成的預支付回話標識憨栽,該值有效期為2小時
@param package 暫填寫固定值Sign=WXPay
@param nonceStr 隨機字符串帜矾,不長于32位。推薦隨機數(shù)生成算法
@param timeStamp 時間戳屑柔,請見接口規(guī)則-參數(shù)規(guī)定
@param sign 簽名屡萤,詳見簽名生成算法
注意:
和支付寶一樣,這些信息都要從服務端獲取掸宛,嚴禁放在客戶端死陆。
三、 銀聯(lián)支付
銀聯(lián)支付基本上沒有什么坑唧瘾,用起來也比較簡單措译,就是SDK比較難找。
https://open.unionpay.com/ajweb/help/file/techFile?productId=3
關(guān)于配置問題就不說了饰序,和支付寶领虹、微信支付一樣,提供一篇文章非常詳細求豫。
http://blog.csdn.net/lxlzy/article/details/53338278
下面是個人封裝的三種支付塌衰,可做參考:
https://github.com/DeveloperiMichael/SAPlatformPayManager