IOS微信支付 总结
2016-01-01 21:40
716 查看
1、需要的文件 和数据
(I)、需要的数据
A>>>红色的为辅助文件, 若预付订单在服务器上生成,可以不需要这个。
B>>>蓝色的文 微信官方提供的SDK
(II)、需要的数据
其中前三个是必须的, 后两个 我配置的时候暂时没用到。
A>>> APP_ID @"wxe2c244c0243fbb50"
B>>> MCH_ID @"1220892901" 微信发送到个人邮箱的 商户号注意是:10位数字
C>>>PARTNER_Key @"a2067c2e1a0327a3aa437d76f59b3ac3"
————————————————=—————————
————————————————=—————————
D>>>APP_SECRET @"ac41b7eddd9482594feedca01ae9940d"
E>>>APP_Key @"yePd1EMqjBHtkIrdraJs0sGtaEjtzbfH8SBuzGqkyBnSZNI5kuu93lSwLO41ctT8RPNi5IPjid9lsjfVP2oRKei4KEZdidxtk41oTRoljCKdhYyhIFieWBw8r4ZLDuqu"
2、设置回调URL:
详情参考微信官方文档, 虽然不全但是很权威 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
1、把准备好的 SDK和辅助文件拖入工程
2、添加回调URL 如下截图
3、APPDeleget中
4、APP_ID等参数的 设置如截图
5、微信支付进行时 (关键代码)
首先调用统一下单, 获取预付ID(可再服务器上操作, 省去此步骤)。
然后调起支付。
(I)、需要的数据
A>>>红色的为辅助文件, 若预付订单在服务器上生成,可以不需要这个。
B>>>蓝色的文 微信官方提供的SDK
(II)、需要的数据
其中前三个是必须的, 后两个 我配置的时候暂时没用到。
A>>> APP_ID @"wxe2c244c0243fbb50"
B>>> MCH_ID @"1220892901" 微信发送到个人邮箱的 商户号注意是:10位数字
C>>>PARTNER_Key @"a2067c2e1a0327a3aa437d76f59b3ac3"
————————————————=—————————
————————————————=—————————
D>>>APP_SECRET @"ac41b7eddd9482594feedca01ae9940d"
E>>>APP_Key @"yePd1EMqjBHtkIrdraJs0sGtaEjtzbfH8SBuzGqkyBnSZNI5kuu93lSwLO41ctT8RPNi5IPjid9lsjfVP2oRKei4KEZdidxtk41oTRoljCKdhYyhIFieWBw8r4ZLDuqu"
2、设置回调URL:
详情参考微信官方文档, 虽然不全但是很权威 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
1、把准备好的 SDK和辅助文件拖入工程
2、添加回调URL 如下截图
3、APPDeleget中
#import "WXApi.h" - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //注册微信支付 [WXApi registerApp:@"wx774b6ed9aa2aaeeb" withDescription:@"demo 2.0"]; } //处理微信通过URL启动App时传递的数据 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { [WXApi handleOpenURL:url delegate:self]; return YES; } //微信回调 - (void)onResp:(BaseResp *)resp { //回到中间模块(如果被用户点走了) JY_TabBarController *tabBar = [JY_TabBarController tabCtrOnce]; [tabBar setSelectedIndex:2]; CGRect rect = tabBar.tabBar.frame; rect.origin.y =K_ManScreenHeight; tabBar.tabBar.frame = rect; //errCode switch (resp.errCode) { case WXSuccess:{ // 成功回调 // 支付完成 }break; default:{//提示微信支付失败 }break; } }
4、APP_ID等参数的 设置如截图
5、微信支付进行时 (关键代码)
首先调用统一下单, 获取预付ID(可再服务器上操作, 省去此步骤)。
然后调起支付。
//统一下单 -(Void)toPay{ //创建支付签名对象 payRequsestHandler *req = [[payRequsestHandler alloc] init]; //初始化支付签名对象 [req init:APP_ID mch_id:MCH_ID]; // 设置密钥 [req setKey:PARTNER_Key]; /****************************************** ******************************************/ //统一下单 获取预付ID NSString *prePayId = [self getPrePayIdWith:req]; //发起支付 if (prePayId) { if ([self payWithPrepayid:prePayId with:req]) { NSLog(@"调用微信成功"); }else{ NSLog(@"调用微信失败"); } } } //统一下单 -(NSString *)getPrePayIdWith:(payRequsestHandler *)req{ time_t now; time(&now); NSString *time_stamp = [NSString stringWithFormat:@"%ld", now];//时间戳 NSString *nonce_str = [WXUtil md5:time_stamp];//随机字符 NSMutableDictionary *prePayParams = [[NSMutableDictionary alloc] init]; [prePayParams setObject:APP_ID forKey:@"appid"]; [prePayParams setObject:MCH_ID forKey:@"mch_id"]; [prePayParams setObject:nonce_str forKey:@"nonce_str"];//随机字符串 [prePayParams setObject:@"商品" forKey:@"body"];//商品或支付单简要描述 [prePayParams setObject:[self generateTradeNO] forKey:@"out_trade_no"];//商户系统内部的订单号,32个字符内、可包含字母 [prePayParams setObject:@"1" forKey:@"total_fee"];//以分位单位 int 类型 [prePayParams setObject:[self getIPAddress] forKey:@"spbill_create_ip"];//本机IP [prePayParams setObject:NOTIFY_URL forKey:@"notify_url"];//接收微信支付异步通知回调地址 [prePayParams setObject:@"APP" forKey:@"trade_type"]; //最后添加签名信息 NSString *sign = [req createMd5Sign:prePayParams]; [prePayParams setObject:sign forKey:@"sign"];//签名 NSString * prePayid = [req sendPrepay:prePayParams]; return prePayid; } //发起支付 -(BOOL)payWithPrepayid:(NSString *)prePayId with:(payRequsestHandler *)req{ time_t now; time(&now); NSString *time_stamp = [NSString stringWithFormat:@"%ld", now]; NSString *nonce_str = [WXUtil md5:time_stamp]; NSMutableDictionary *prePayParams = [[NSMutableDictionary alloc] init]; [prePayParams setObject:APP_ID forKey:@"appid"]; [prePayParams setObject:MCH_ID forKey:@"partnerid"]; [prePayParams setObject:prePayId forKey:@"prepayid"]; [prePayParams setObject:@"Sign=WXPay" forKey:@"package"]; [prePayParams setObject:nonce_str forKey:@"noncestr"]; [prePayParams setObject:time_stamp forKey:@"timestamp"]; //获取签名信息 NSString *sign= [req createMd5Sign:prePayParams]; //输出debug info NSString *debug = [req getDebugifo]; NSLog(@"调起支付签名: %@\n",debug); //调起微信支付 PayReq* payReq = [[PayReq alloc] init]; payReq.openID = [prePayParams objectForKey:@"appid"]; payReq.partnerId = [prePayParams objectForKey:@"partnerid"]; payReq.prepayId = [prePayParams objectForKey:@"prepayid"]; payReq.nonceStr = [prePayParams objectForKey:@"noncestr"]; payReq.timeStamp = (int)now; payReq.package = [prePayParams objectForKey:@"package"]; payReq.sign = sign; BOOL aBool = [WXApi sendReq:payReq]; return aBool; }
相关文章推荐
- 微信公众平台自定义菜单
- 微信公众平台预研小结
- 微信6.0主界面
- 微信公众号支付接口网页开发示例
- Android仿微信语音聊天
- 【玩转微信公众平台之中的一个】序章(纯粹扯淡)
- java微信公众号开发
- cas sso 4.0 集成OAuth,用微信登陆示例
- 安卓版本微信多开
- HTML5网页如何调用浏览器APP的微信分享功能
- iOS --微信支付基本流程
- 微信amr格式语音转MP3
- 微信开发-微信消息的接收与返回(2)
- 高仿微信图片选择模块
- 纯html实现将网页页面分享到微信朋友圈添加缩略图图片的方法
- Android——微信支付功能模块的嵌入
- 微信公众号API使用总结
- 微信公众平台开发实战Java版之微信获取用户基本信息
- 微信开发-微信公共账号申请与接入(1)
- 微信