一.微信支付
前提:在
微信开发者平台注册
APP这样的事一般的是经理给你做好的,这个可以忽略,如果需要做的话,可以
参考别人的这篇文章
,微信支付没有想象的那么困难,下面我会写两种:一种在客户端(app)完成,一种在后台完成
微信的支付交互图
微信的支付交互图
客户端需要做的是调用支付,显示支付结果
微信SDK的下载
在Target —> BuildPhases —> Link Binary With Libraries— 点击+号 -> 搜索你需要的系统库。
导入微信支付SDK库
导入WechatTool
设置URL Scheme
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:MXWechatAPPID];
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options
{
if ([url.host isEqualToString:@"safepay"]) {
NSLog(@"这里做支付宝的操作");
}else{
return [WXApi handleOpenURL:url delegate:[JKApiManager sharedManager]];
}
return YES;
}
#pragma mark - 微信支付回调
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [WXApi handleOpenURL:url delegate:[JKApiManager sharedManager]];
}
//发起微信支付
[JKWechatPayHandler jumpToWxPay];
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:MXWechatAPPID];
return YES;
}
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options
{
if ([url.host isEqualToString:@"safepay"]) {
NSLog(@"这里做支付宝的操作");
}else{
/*
* 后台生成六个参数调用时
*/
// return [WXApi handleOpenURL:url delegate:self];
/*
* app自己生成六个参数调用时
*/
return [WXApi handleOpenURL:url delegate:self];
}
return YES;
}
#pragma mark - 微信支付回调
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
/*
* 后台生成六个参数调用时
*/
// return [WXApi handleOpenURL:url delegate:self];
/*
* app自己生成六个参数调用时
*/
return [WXApi handleOpenURL:url delegate: self];
}
//微信SDK自带的方法,处理从微信客户端完成操作后返回程序之后的回调方法,显示支付结果的
-(void) onResp:(BaseResp*)resp
{
//启动微信支付的response
NSString *payResoult = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
if([resp isKindOfClass:[PayResp class]]){
//支付返回结果,实际支付结果需要去微信服务器端查询
switch (resp.errCode) {
case 0:
payResoult = @"JK支付结果:成功!";
NSLog(@"%@",payResoult);
break;
case -1:
payResoult = @"JK支付结果:失败!";
NSLog(@"%@",payResoult);
break;
case -2:
payResoult = @"JK用户已经退出支付!";
NSLog(@"%@",payResoult);
break;
default:
payResoult = [NSString stringWithFormat:@"JK支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
NSLog(@"%@",payResoult);
break;
}
}
}
/*
* 自己写的支付
*/
- (void)WXPay{
在这里把价格和商品的信息发送给服务器,服务器会生成上面的6个参数(我们后台生成的是一个字典,里面是6个键值,对应的是6个参数值)在此调用下面的方法传到下面去
}
-(void)payDictionary:(NSDictionary *)dict{
//需要创建这个支付对象
PayReq *req = [[PayReq alloc] init];
//由用户微信号和AppID组成的唯一标识,用于校验微信用户
req.openID = [NSString stringWithFormat:@"%@",dict[@"appid"]];
// 商家id,在注册的时候给的
req.partnerId = [NSString stringWithFormat:@"%@",dict[@"partnerid"]];
// 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
req.prepayId = [NSString stringWithFormat:@"%@",dict[@"prepayid"]];
// 根据财付通文档填写的数据和签名
//这个比较特殊,是固定的,只能是即req.package = Sign=WXPay
req.package = @"Sign=WXPay";
// 随机编码,为了防止重复的,在后台生成
req.nonceStr = [NSString stringWithFormat:@"%@",dict[@"noncestr"]];
// 这个是时间戳,也是在后台生成的,为了验证支付的
NSString * stamp = [NSString stringWithFormat:@"%@",dict[@"timestamp"]];
req.timeStamp = stamp.intValue;
// 这个签名也是后台做的
req.sign = [NSString stringWithFormat:@"%@",dict[@"sign"]];
//发送请求到微信,等待微信返回onResp
[WXApi sendReq:req];
}
微信的两种支付方式demo 密码: tp8q
二.支付宝支付
客户端和后台的两种操作的demo
密码: djgu
作者:JoanKing
链接:http://www.jianshu.com/p/b73be8ce1616
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。