声明:本人文笔不好,希望大家谅解。
ios打赏是一个有歧义的地方。苹果没有明确的定义,目前都是以直接支付的方式集成的,所以不用考虑内购问题。
由于是打赏所以不用在客户端做订单商品信息。
1 微信支付的集成
首先去这 https://pay.weixin.qq.com/ 下载微信支付的SDK以及demo
导入文件如 图1.
在你的项目中的Appdelegate中实现方法
代码
- (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
实现注册微信的方法
[WXApiregisterApp:@"xxxx"withDescription:@"demo 2.0"];
[WXApiregisterApp:@"xxxx"];
这两种注册方法没什么区别
并且设置URL Schemes如 图2
在你需要实现微信支付的地方写如下代码
//调起微信支付
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];
各个字段从服务器返回的数据中取出来就可以了。
回调函数在 图3 这个文件在demo中自己查看就行了。
可以自己给这俩文件添加个代理方法直接回调到你当前发起支付的页面来处理结果。微信打赏就完成了。支付的话也差不多就是需要在app中生成商品信息。
2 支付宝支付
支付宝相对于微信支付就好多了,就是文档不好找 ,首先https://doc.open.alipay.com/doc2/alipayDocIndex.htm到这里下载sdk与demo
把 AlipaySDK.bundle、AlipaySDK.framework 拖到项目中。
添加依赖库如 图4
导入头文件#import<AlipaySDK/AlipaySDK.h>
在发起支付宝支付打赏的时候实现代码
[[AlipaySDK defaultService]payOrder:@"xxx"fromScheme:kUrlSchemecallback:^(NSDictionary*resultDic) {
NSLog(@"reslut = %@",resultDic);
//9000订单支付成功
//8000正在处理中,支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
//4000订单支付失败
//6001用户中途取消
//6002网络连接出错
//6004支付结果未知(有可能已经支付成功),请查询商户订单列表中订单的支付状态
//其它其它支付错误
}];
@“xxx”中 就是服务器返回的数据,自己替换下就行了。
2017年01月13日11:26:37 更新
还有就是支付宝支付分为 应用支付和网页授权支付,网页支付是走支付宝SDK的回调的,但是支付宝应用支付是不走回调的,说明了只是走到了 Appdelegate里面的 - (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary*)options ;这个方法里面,然后就没有又然后了。
就是具体的回调方法需要你自己去写 通知也好,block也好需要自己去定义。支付宝这大坑在文档里面是没有的。我这里用的是block
#pragma mark以下是支付宝支付相关
-(BOOL)Alipay:(NSURL*)url{
/*
9000订单支付成功
8000正在处理中
4000订单支付失败
6001用户中途取消
6002网络连接出错
*/
if([url.hostisEqualToString:@"safepay"]) {
//这个是进程KILL掉之后也会调用,这个只是第一次授权回调,同时也会返回支付信息
[[AlipaySDKdefaultService]processAuth_V2Result:urlstandbyCallback:^(NSDictionary*resultDic) {
[selfAlipayWithResutl:resultDic];
}];
//跳转支付宝钱包进行支付,处理支付结果,这个只是辅佐订单支付结果回调
[[AlipaySDKdefaultService]processOrderWithPaymentResult:urlstandbyCallback:^(NSDictionary*resultDic) {
[selfAlipayWithResutl:resultDic];
}];
}elseif([url.hostisEqualToString:@"platformapi"]){
//授权返回码
[[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];
}
}
然后在你要处理回调的页面 实现这个block就行了。
打赏就完成了。是不是支付宝比微信简单的多。