微信支付哪些事儿
2016-05-04 09:49
841 查看
公司要求项目添加上微信支付和支付宝支付在这里我将自己的心得以及自己总结的步骤总结在这里,希望让读者少一点入坑。,那么我们现在从最难的骨头啃起来,一步步教大家完成微信支付,关于申请微信支付的东西我就不再这里累赘,很多帖子都有(其实是因为公司这部分我没有参与,嘿嘿)。开始我们的微信支付的旅行吧。
前提条件,让你的 APP有支付的本领 ,申请到微信支付相关以后,下面这些东西对我们很重要。
前提条件:
注意
支付要保证安全性,就要使用加密。微信当然也是这样,微信为了防止中间有人加入窃取信息或者改变价格。有自己的加密方式——生成预支付Id,我们通过封装数据形成XML格式(中间加密)以字符串类型传给微信,获取预支付Id。紧接着,获取以后通过预支付等信息再次加密。APP将参数传给微信,付款成功!回调信息说明支付情况。(关于加密具体怎么实现我会在下面详细说明)。
步骤以及代码
接下来说说主要的步骤吧(比比叨这么久终于说正事了,请不要打我么么哒~)
H92X9S)M$J0XZQ@K13C0GVS.jpg
1.在做微信支付以前导入
2.在AppDelegate 的导入头文件 #import "WXApi.h" 挂上代理 WXApiDelegate
E618D85B-4F5C-480B-96DA-6F4E9FE548A9.png
4.触发支付
触发支付,就要对自己的订单号价格等进行加密 在这里就可以分成两种加密 ,一种是在APP端进行加密,第二种是在服务端进行加密。一般使用的在服务端加密比较安全。一个个进行说明。
4.1 服务端进行加密
服务端加密我们不需要知道具体加密怎么进行的。(在底下我会给你说清楚的啦~)我们只是需要将所需参数传过去 我是用的AFN
后台没有加密错误,那么会跳转到微信上进行支付。(好累啊 怎么还不结束呀)
4.2 APP端进行加密
这种方法可以自己先进行测试 ,或者为了缩短工期自己进行所有工作。(看起来好像好厉害的样子啊 )
首先,下载文章最底部封装的微信支付文件,导入到工程中。
支付界面引入头文件
在触发支付的方法中调用
前提条件,让你的 APP有支付的本领 ,申请到微信支付相关以后,下面这些东西对我们很重要。
前提条件:
//APPID 一般以wx开头 static NSString *const ZQAppID = @"APPID"; //appsecret static NSString *const ZQAppSecret = @"appsecret"; //商户号,填写商户对应参数 static NSString *const ZQMchID = @"商户号"; //商户API密钥,填写相应参数 static NSString *const ZQPartnerID = @"商户API密钥"; // 预支付请求路径固定可以不改变 static NSString *const ZQPrePayURL = @"https://api.mch.weixin.qq.com/pay/unifiedorder"; // // 支付回调页面(异步) (https://api.mch.weixin.qq.com/pay/unifiedorder)(异步处理支付调用返回数据) static NSString *const ZQPayNotifyURL = @"支付回调页面";
注意
微信支付的单位为分!!!整数类型才可以(int)
流程简述支付要保证安全性,就要使用加密。微信当然也是这样,微信为了防止中间有人加入窃取信息或者改变价格。有自己的加密方式——生成预支付Id,我们通过封装数据形成XML格式(中间加密)以字符串类型传给微信,获取预支付Id。紧接着,获取以后通过预支付等信息再次加密。APP将参数传给微信,付款成功!回调信息说明支付情况。(关于加密具体怎么实现我会在下面详细说明)。
步骤以及代码
接下来说说主要的步骤吧(比比叨这么久终于说正事了,请不要打我么么哒~)
H92X9S)M$J0XZQ@K13C0GVS.jpg
1.在做微信支付以前导入
libc++.tbd libsqlite3.0.tbd libz.tbd SystemConfiguration.framework CoreTelephony.framework Security.framework
2.在AppDelegate 的导入头文件 #import "WXApi.h" 挂上代理 WXApiDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ //这里是你自己写的一些其他代码 实例化window 设置根视图云云 [WXApi registerApp:@"APPID" withDescription:@"应用描述"]; } //支付回调 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [WXApi handleOpenURL:url delegate:self]; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [WXApi handleOpenURL:url delegate:self]; } #pragma mark 微信回调的代理方法 - (void)onResp:(BaseResp *)resp { if ([resp isKindOfClass:[PayResp class]]) { PayResp *response = (PayResp *)resp; switch (response.errCode) { case WXSuccess: NSLog(@"suceess"); break; default: NSLog(@"failed"); break; } } }
如果集成里支付宝以及微信支付等 ,走的回调方法是相同的 ,我们是通过 回调中字符串sourceApplication 进行判断的 例如支付宝支付 为com.alipay.iphoneclient 微信支付为 com.tencent.xin
3.在targets的info中添加 urltypes添加一个在 identifier自己起一个名称(最好软件英文名字) 在 URL schemes 中写下APPIDE618D85B-4F5C-480B-96DA-6F4E9FE548A9.png
4.触发支付
触发支付,就要对自己的订单号价格等进行加密 在这里就可以分成两种加密 ,一种是在APP端进行加密,第二种是在服务端进行加密。一般使用的在服务端加密比较安全。一个个进行说明。
4.1 服务端进行加密
服务端加密我们不需要知道具体加密怎么进行的。(在底下我会给你说清楚的啦~)我们只是需要将所需参数传过去 我是用的AFN
//初始化一个请求管理器 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //接口地址 NSString *urlString = [NSString stringWithFormat:@"%@%@",@"地址头",@"其他"]; //参数字典 NSDictionary *parameters =@{@"fcode": @"账号", @"password": @"密码",@"out_trade_no":@"订单号",@"total_fee":@"金额(分为单位)",@"attach":@"商品详情"}; //post请求 [manager POST:urlString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { //返回状态值1表示成功 0表示失败 NSString *state=responseObject[@"state"]; //预支付ID NSString *prepayid=responseObject[@"prepayid"]; //返回文字信息成功或者失败 NSString *message=responseObject[@"message"]; //请求数据成功 if ([state intValue]==1) { //支付信息 PayReq* req = [[PayReq alloc] init]; //APPID req.openID = [responseObject objectForKey:@"appid"]; //商户号 req.partnerId = [responseObject objectForKey:@"partnerid"]; //预支付ID req.prepayId = [responseObject objectForKey:@"prepayid"]; //时间戳 req.nonceStr = [responseObject objectForKey:@"noncestr"]; //支付类型(为固定字符串:Sign=WXPay) req.timeStamp = [[responseObject objectForKey:@"timestamp"] intValue]; //加密串 req.package = [responseObject objectForKey:@"package"]; //预支付ID req.sign = [responseObject objectForKey:@"sign"]; // 发起微信支付 [WXApi sendReq:req];; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { }];
后台没有加密错误,那么会跳转到微信上进行支付。(好累啊 怎么还不结束呀)
4.2 APP端进行加密
这种方法可以自己先进行测试 ,或者为了缩短工期自己进行所有工作。(看起来好像好厉害的样子啊 )
首先,下载文章最底部封装的微信支付文件,导入到工程中。
支付界面引入头文件
#import "ZQPay.h"
在触发支付的方法中调用
[ZQPay payWXWithOrderName:@"订单名字(不是订单详情)" price:@"订单价格(单位为分)" tradeNo:@"订单号"
相关文章推荐
- C#开发微信门户及应用(37)--微信公众号标签管理功能
- C#.net 微信公众账号接口开发
- 微信公众平台DEMO(PHP)
- 微信开发中网页授权access_token与基础支持的access_token异同
- 零基础微信开发入门指南
- Android微信分享及AS生成APK
- iphone 微信下浏览器中数字去除下划线
- openerp7微信支付开发
- IOS微信分享功能简单实现
- IOS微信分享功能简单实现
- iPhone 反编译-微信多开分身版原理,一部iPhone登录多个微信号
- 零基础二十分钟搭建SAE微信个人号后台
- JAVA版的微信红包算法
- 微信第三方开发:处理消息和事件页面发送文字信息
- Android小程序-Walker注册页面(五)
- 微信开发本地测试环境搭建
- IOS开发之——类似微信摇一摇的功能实现
- Android 分享到微信6.0后好友、朋友圈
- 微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析
- 作业七——“南通大学教务管理系统微信公众号” 用户体验分析