前段時間因爲項目需求,移除了項目中的微信支付SDK和支付寶支付SDK,這種狀況下須要本身搞定支付,第一時間考慮到的是使用openshare,可是當下載openshare下來後發現,openshare的支付接口,並不能直接替換官方SDK支付接口,
官方SDK的實現邏輯是後臺訂單簽名完成後,客服端傳簽名信息及參數給支付SDK,支付SDK生成協議url,而後拉起第三方支付APP,
而openshare的支付接口是直接傳拉起支付的協議url地址,將生成協議url地址的操做也交給後臺來生成, 這樣的話後臺須要修改代碼,
可否不修改後臺代碼,弄一個支付接口直接替換官方SDK支付接口,實現無縫對接呢,因而就研究了下微信和支付寶支付時APP間通信關係,最後封裝成XHPayKit.git
1.XHPayKit擁有和官方SDK相似接口,能夠直接替換官方SDK支付接口,若是你使用過官方SDK,那麼轉換爲本庫你只需花費極短期.
2.XHPayKit只有10kb大小,不用導入任何依賴庫,即可實現微信支付、支付寶支付,若是你想爲項目瘦身或因爲某種緣由,不想使用官方SDK實現支付功能,此庫將是一個不錯的選擇.
3.XHPayKit使用時,不須要配置微信等平臺appid等信息,服務端配置就能夠了,由於後臺簽名訂單時會返回appid等信息給客戶端.github
1.先在微信、支付寶開放平臺註冊你的應用,並得到支付能力
2.導入此庫,並請將 weixin 、 alipay 字段添加到info.plist白名單
3.添加本身APP URL Schemes,和微信回調URL Schemes,詳見README文檔服務器
//微信支付參數,下面7個參數,由後臺簽名訂單後生成,並返回給客服端(與官方SDK一致)
//注意:請將下面參數設置爲你本身真實訂單簽名後服務器返回參數,即可進行實際支付
XHPayWxReq *req = [[XHPayWxReq alloc] init];
req.openID = @"";
req.partnerId = @"";
req.prepayId = @"";
req.nonceStr = @"";
req.timeStamp = 1518156229;
req.package = @"";
req.sign = @"";
//傳入訂單模型,拉起微信支付
[[XHPayKit defaultManager] wxpayOrder:req completed:^(NSDictionary *resultDict) {
NSLog(@"支付結果:\n%@",resultDict);
NSInteger code = [resultDict[@"errCode"] integerValue];
if(code == 0){//支付成功
}
}];
複製代碼
//支付寶訂單簽名,此簽名由後臺簽名訂單後生成,並返回給客戶端(與官方SDK一致)
//注意:請將下面值設置爲你本身真實訂單簽名,即可進行實際支付
NSString *orderSign = @"很長的一串支付寶訂單簽名";
//傳入支付寶訂單簽名 和 本身App URL Scheme,拉起支付寶支付
[[XHPayKit defaultManager] alipayOrder:orderSign fromScheme:@"XHPayKitExample" completed:^(NSDictionary *resultDict) {
NSLog(@"支付結果:\n%@",resultDict);
NSInteger status = [resultDict[@"ResultStatus"] integerValue];
if(status == 9000){//支付成功
}
}];
複製代碼
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_9_0
/** iOS9及之後 */
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
BOOL result = [[XHPayKit defaultManager] handleOpenURL:url];
if (!result) {//這裏處理其餘SDK(例如QQ登陸,微博登陸等)
}
return result;
}
#endif
/** iOS9如下 */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [[XHPayKit defaultManager] handleOpenURL:url];
if (!result) {//這裏處理其餘SDK(例如QQ登陸,微博登陸等)
}
return result;
}
複製代碼
/** 是否安裝微信 @return 已安裝YES,未安裝NO */
+(BOOL)isWxAppInstalled;
/** 是否安裝支付寶 @return 已安裝YES,未安裝NO */
+(BOOL)isAliAppInstalled;
複製代碼
{
"errCode":0,
"errStr":"成功"
}
//如下狀態碼含義與官方SDK一致
errCode = 0,成功
errCode = -1,普通錯誤類型
errCode = -2,用戶點擊取消並返回
errCode = -3,發送失敗
errCode = -4,受權失敗
errCode = -5,微信不支持
複製代碼
{
"result":"",
"resultStatus":"9000",
"memo":"支付成功"
}
//如下狀態碼含義與官方SDK一致
resultStatus = 9000,支付成功
resultStatus = 8000,正在處理中,支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態
resultStatus = 4000,支付失敗
resultStatus = 5000,重複請求
resultStatus = 6001,用戶中途取消
resultStatus = 6002,網絡鏈接出錯
resultStatus = 6004,支付結果未知(有可能已經支付成功),請查詢商戶訂單列表中訂單的支付狀態
複製代碼
XHPayKit的實現很是簡單,感興趣的同窗能夠下載下來研究下支付時APP間通信.
代碼地址:github.com/CoderZhuXH/…微信