聲明:本人文筆不好鸠姨,希望大家諒解铜秆。
? ? ? ?ios打賞是一個有歧義的地方。蘋果沒有明確的定義讶迁,目前都是以直接支付的方式集成的连茧,所以不用考慮內(nèi)購問題。
由于是打賞所以不用在客戶端做訂單商品信息巍糯。
1 微信支付的集成
首先去這 https://pay.weixin.qq.com/ 下載微信支付的SDK以及demo
導(dǎo)入文件如 圖1.
在你的項目中的Appdelegate中實現(xiàn)方法
代碼
- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {
return[WXApihandleOpenURL:urldelegate:[WXApiManagersharedManager]];
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
return[WXApihandleOpenURL:urldelegate:[WXApiManagersharedManager]];
}
并且在 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
實現(xiàn)注冊微信的方法
[WXApiregisterApp:@"xxxx"withDescription:@"demo 2.0"];
[WXApiregisterApp:@"xxxx"];
這兩種注冊方法沒什么區(qū)別
并且設(shè)置URL Schemes如 圖2
在你需要實現(xiàn)微信支付的地方寫如下代碼
//調(diào)起微信支付
PayReq* req= [[[PayReqalloc]init]autorelease];
req.partnerId=@"1380654701";
req.prepayId=@"wx20161205242740c6aae18cc50936210796";
req.nonceStr=@"dfb6d0ae13af7ede53bc18a4fb82804c";
req.timeStamp=1480919261;
req.package=@"Sign=WXPay";
req.sign=@"9C2879B2FB0F91111324CDBDBE585213";
[WXApisendReq:req];
各個字段從服務(wù)器返回的數(shù)據(jù)中取出來就可以了啸驯。
回調(diào)函數(shù)在 圖3 這個文件在demo中自己查看就行了。
可以自己給這倆文件添加個代理方法直接回調(diào)到你當(dāng)前發(fā)起支付的頁面來處理結(jié)果祟峦。微信打賞就完成了罚斗。支付的話也差不多就是需要在app中生成商品信息。
2 支付寶支付
支付寶相對于微信支付就好多了宅楞,就是文檔不好找 针姿,首先https://doc.open.alipay.com/doc2/alipayDocIndex.htm到這里下載sdk與demo
把 AlipaySDK.bundle、AlipaySDK.framework 拖到項目中厌衙。
添加依賴庫如 圖4
導(dǎo)入頭文件#import<AlipaySDK/AlipaySDK.h>
在發(fā)起支付寶支付打賞的時候?qū)崿F(xiàn)代碼
[[AlipaySDK defaultService]payOrder:@"xxx"fromScheme:kUrlSchemecallback:^(NSDictionary*resultDic) {
NSLog(@"reslut = %@",resultDic);
//9000訂單支付成功
//8000正在處理中距淫,支付結(jié)果未知(有可能已經(jīng)支付成功),請查詢商戶訂單列表中訂單的支付狀態(tài)
//4000訂單支付失敗
//6001用戶中途取消
//6002網(wǎng)絡(luò)連接出錯
//6004支付結(jié)果未知(有可能已經(jīng)支付成功)婶希,請查詢商戶訂單列表中訂單的支付狀態(tài)
//其它其它支付錯誤
}];
@“xxx”中 就是服務(wù)器返回的數(shù)據(jù),自己替換下就行了溉愁。
2017年01月13日11:26:37 更新
還有就是支付寶支付分為 應(yīng)用支付和網(wǎng)頁授權(quán)支付,網(wǎng)頁支付是走支付寶SDK的回調(diào)的,但是支付寶應(yīng)用支付是不走回調(diào)的拐揭,說明了只是走到了 Appdelegate里面的 - (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options 撤蟆;這個方法里面,然后就沒有又然后了堂污。
就是具體的回調(diào)方法需要你自己去寫 通知也好家肯,block也好需要自己去定義。支付寶這大坑在文檔里面是沒有的盟猖。我這里用的是block
#pragma mark以下是支付寶支付相關(guān)
-(BOOL)Alipay:(NSURL*)url{
/*
9000訂單支付成功
8000正在處理中
4000訂單支付失敗
6001用戶中途取消
6002網(wǎng)絡(luò)連接出錯
*/
if([url.hostisEqualToString:@"safepay"]) {
//這個是進(jìn)程KILL掉之后也會調(diào)用讨衣,這個只是第一次授權(quán)回調(diào),同時也會返回支付信息
[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {
[selfAlipayWithResutl:resultDic];
}];
//跳轉(zhuǎn)支付寶錢包進(jìn)行支付式镐,處理支付結(jié)果反镇,這個只是輔佐訂單支付結(jié)果回調(diào)
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {
[selfAlipayWithResutl:resultDic];
}];
}elseif([url.hostisEqualToString:@"platformapi"]){
//授權(quán)返回碼
[[AlipaySDKdefaultService]processAuthResult:urlstandbyCallback:^(NSDictionary*resultDic) {
[selfAlipayWithResutl:resultDic];
}];
}
returnYES;
}
-(void)AlipayWithResutl:(NSDictionary*)resultDic{
NSString*str = [resultDicobjectForKey:@"resultStatus"];
AlipayResultresult =AlipayResultSuccess;
switch(str.intValue) {
case9000:
case6001:
result = str.intValue;
break;
default:
result =AlipayResultFailure;
break;
}
if(self.payComplete) {
self.payComplete(result);
}
}
- (void)alipayonComplete:(ALIPAY_PAY_COMPLETE)completeBlock {
self.payComplete= completeBlock;
}
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options {
if([url.hostisEqualToString:@"safepay"]) {//AliPay
return[selfAlipay:url];
}
}
然后在你要處理回調(diào)的頁面 實現(xiàn)這個block就行了。
打賞就完成了娘汞。是不是支付寶比微信簡單的多歹茶。