微信支付 - iOS
前言
大家都说微信支付很麻烦,我看了一下 就做一下记录吧
正文
一:
1.微信开发网站:https://open.weixin.qq.com
注册一个开发者账号,申请一个app,(大概7个工作日,但是好像不用那么久)应该是一个账号只能申请10个app,申请开通微信支付功能。
2.demo下载地址:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
3.我记得我下载下来的demo就是好用的,不用调。
正常交互的是
交互细节如下:
步骤1:用户进入商户APP,选择商品下单、确认购买,进入支付环节。商户服务后台生成支付订单,签名后将数据传输到APP端。以微信提供的DEMO为例,见图8.1。
步骤2:用户点击后发起支付操作,进入到微信界面,调起微信支付,出现确认支付界面,见图8.2。
步骤3:用户确认收款方和金额,点击立即支付后出现输入密码界面,可选择零钱或银行卡支付见图8.3。
图8.1 商户APP界面实例 |
图8.2 跳转到微信支付 |
图8.3 用户确认支付 |

第四步:输入正确密码后,支付完成,用户端微信出现支付详情页面。见图8.4。
第五步:回跳到商户APP中,商户APP根据支付结果个性化展示订单处理结果。见图8.5。
图8.4 支付成功提示页面 |
图8.5 返回到商户APP提示 |
4.业务流程是

图8.6 APP支付时序图
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。
步骤5:商户后台接收支付通知。
步骤6:商户后台查询支付结果。
二:
怎么导入自己的工程里呢??
1.我现在就导入了这一个文件WXApiManager.h/m
#import "AppDelegate.h"
#import "WXApi.h"
#import "WXApiObject.h"
#import "WXApiManager.h"
@interface AppDelegate ()<WXApiDelegate> @end @implementation AppDelegate #define APPID @"wxbxxxxxxxxxxx"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// self.window.backgroundColor = [UIColor whiteColor];
// [self.window makeKeyAndVisible]; [WXApi registerApp:APPID];
return YES;
} - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
} - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
// self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
// self.window.backgroundColor = [UIColor whiteColor];
// [self.window makeKeyAndVisible]; 这个一定要注释掉
#import "ViewController.h"
#import "WXApiObject.h"
#import "WXApi.h" @interface ViewController () @end @implementation ViewController
- (IBAction)PayButton:(id)sender {
//============================================================
// V3&V4支付流程实现
// 注意:参数配置请查看服务器端Demo
// 更新时间:2015年11月20日
//============================================================
NSString *i = @"";
NSString *urlString = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
//解析服务端返回json数据
NSError *error;
//加载一个NSURL对象
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
//将请求的url数据放到NSData对象中
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
if ( response != nil) {
NSMutableDictionary *dict = NULL;
//IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
dict = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error]; NSLog(@"url:%@",urlString);
if(dict != nil){
NSMutableString *retcode = [dict objectForKey:@"retcode"];
if (retcode.intValue == 0){
NSMutableString *stamp = [dict objectForKey:@"timestamp"]; //调起微信支付
PayReq* req = [[[PayReq alloc] init]autorelease];
// req.partnerId = [dict objectForKey:@"partnerid"];
// req.prepayId = [dict objectForKey:@"prepayid"];
// req.nonceStr = [dict objectForKey:@"noncestr"];
// req.timeStamp = stamp.intValue;
// req.package = [dict objectForKey:@"package"];
// req.sign = [dict objectForKey:@"sign"]; //商户号
req.partnerId = @"10000100";
//预支付交易会话ID
req.prepayId = @"wx2016032814422154f71338a50151536932";
//随机字符串
req.nonceStr = @"5c95f7583741ee4ba8ae67f1658013dc";
NSMutableString *z = [NSMutableString stringWithFormat:@"1459147341"];
//时间戳
req.timeStamp = z.intValue;
//扩展字段
req.package = [dict objectForKey:@"package"];
//签名
req.sign = @"22FD8F35A93E5E4EE892CE3638CE4945"; [WXApi sendReq:req];
//日志输出
NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
i = @"";
}else{
i = [dict objectForKey:@"retmsg"];
}
}else{
i = @"服务器返回错误,未获取到json对象";
}
}else{
i = @"服务器返回错误";
}
}
参数都是那微信demo里的参数填的
其实现在是可以支付的,亲 可以试一下咯
2.还有通知和加密 ,下次再说咯。。。
希望可以帮打大家 有什么不对的地方 欢迎指出 大家一起≈学习
微信支付 - iOS的更多相关文章
- Apicloud微信支付iOS可以,安卓返回-1的之避坑指南
相信各位小伙伴在接入微信支付的时候,一定遇到过返回-1的这个问题,说实话,这个问题真的很恶心,微信开放平台提供的文档在关于-1这个问题的描述(可能的原因:签名错误.未注册APPID.项目设置APPID ...
- 李洪强iOS开发支付集成之微信支付
iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
每日更新关注:http://weibo.com/hanjunqiang 新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret, ...
- 关于IOS调用微信支付jsapi不起作用的解决方法
微信支付时,安卓机调用 jsapi可以支付,IOS就不行,点击立即支付,直接返回原立即支付页面,跟刷新页面差不多,解决方案很简单:两句话而已. 不得不说,微信支付坑太多了,我擦..... <sc ...
- iOS之微信支付
前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...
- iOS - WXPay 微信支付
1.微信支付申请 微信支付官方集成指引 微信支付官方集成指导视频 微信 APP 支付开发者文档 微信公众平台 微信开放平台 微信商户平台 1.1 微信 APP 支付申请步骤 APP 支付:APP 支付 ...
- IOS开发--微信支付
前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...
- iOS应用之微信支付集成-直接前端集成
所有信息的生成都在前端完成,包括对订单进行sign签名以及MD5签名加密(此方法相对来说有些复杂,没有官方给的方法简单).注:官方给的是v3&v4支付流程,签名和加密都是在服务器端进行,由于没 ...
- 微信支付(APP)集成时碰到的问题(.net提示“无权限”、iOS跳转到微信支付页面中间只有一个“确定”按钮)
直入主题之前,请容我吐槽一下微*的官方东西:ASDFQ%#$%$#$%^FG@#$%DSFQ#$%.......:吐槽玩了!大家心照就好. 要完成手机APP跳转到微信的APP进行微信支付,需要进行如下 ...
随机推荐
- LWIP裸机环境下实现TCP与UDP通讯
前面移植了LWIP,并且简单的实用了DHCP的功能,今天来使用一下实际的数据通讯的功能 首先是实现TCP客户端,我先上代码 #ifndef __TCP_CLIENT_H_ #define __TCP_ ...
- 【iScroll源码学习01】准备阶段 - 叶小钗
[iScroll源码学习01]准备阶段 - 叶小钗 时间 2013-12-29 18:41:00 博客园-原创精华区 原文 http://www.cnblogs.com/yexiaochai/p/3 ...
- Linux开发IDE打造
一直以来都是在windows下做开发的,微软提供的IDE vs开发起来确实快捷高效,接触linux也很久了通常都是使用vim进行一些基础文件的编译,现在突然要转到linux做开发还是不太适应的,网上 ...
- Delphi中使用Dos窗口输出调试信息
在项目文件 *.DPR (Project->View Source) 里加上{$APPTYPE CONSOLE} 然后,在需要输出处加上 Writeln(‘your debug messa ...
- iOS开发笔记 - 界面调试神器Reveal
http://blog.csdn.net/jackfrued/article/details/50934092 Reveal是iOS开发工具中的神器之一,它能够在应用程序运行过程中调试应用程序 ...
- CCArray
CCArray也是cocos2d-x自己写的类.它相当于是objc的NSArray.在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不 ...
- locate/slocate命令
locate命令和slocate命令都用来查找文件或目录. locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/l ...
- BZOJ3202 [Sdoi2013]项链
Problem E: [Sdoi2013]项链 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 427 Solved: 146[Submit][Sta ...
- iOS 选择框 单选框
UIButton *checkbox = [UIButton buttonWithType:UIButtonTypeCustom]; CGRect checkboxRect = CGRectMake( ...
- [Angular Tutorial] 0-Bootstraping
在这一节的tutorial中,您将会逐渐熟悉AngularJS phonecat app的最重要的源代码文件.您也将学到如何将开发服务器与angular-seed绑定到一起,并且在浏览器中运行应用. ...