一、微信支付简易流程:

用户 —》微信客户端 —》商户APP —》商户后台应用 —》微信支付系统

二、微信支付顺序流程:

1、用户使用APP客户端,选择商品下单。

2、商户客户端(就是你做的APP)将用户的商品数据传给商户服务器,请求生成支付订单。

3、商户后台调用统一下单API向微信的服务器发送请求,微信服务器生成预付单,并生成一个prepay_id返回给商户后台。

4、商户后台将这个prepay_id返回给商户客户端。

5、用户点击确认支付,这时候商户客户端调用SDK打开微信客户端,进行微信支付。

6、微信客户端向微信服务器发起支付请求并返回支付结果(他们之间交互用的就是prepay_id这个参数,微信的服务器要验证微信客户端传过去的参数是否跟第三步中生成的那个id一致)。

7、用户输入支付密码后,微信客户端提交支付授权,跟微信服务器交互,完成支付

8、微信服务器给微信客户端发送支付结果提示,并异步给商户服务器发送支付结果通知。

9、商户客户端通过支付结果回调接口查询支付结果,并向后台检查支付结果是否正确,后台返回支付结果。

10、商户客户端显示支付结果,完成订单,发货。

三、集成微信SDK步骤:

1、下载SDK

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

2、导入微信支付SDK库

  • SystemConfiguration.framework
  • libz.tbd
  • libsqlite3.0.tbd
  • CoreTelephony.framework
  • QuartzCore.framework

3、设置URL Scheme

Target —> info —> URL Types —> URL Scheme(wxd930ea5d5a258f4f)

4、在Appdelegate中注册APPID

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. /** * 向微信终端注册ID,这里的APPID一般建议写成宏,容易维护。@“测试demo”不需用管。这里的id是假的,需要改这里还有target里面的URL Type */ [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"测试demo"]; return YES; }

5、处理微信通过URL启动时传递的数据

//9.0前的方法,为了适配低版本 保留

- (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];

}

//9.0后的方法

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{

//这里判断是否发起的请求为微信支付,如果是的话,用WXApi的方法调起微信客户端的支付页面(://pay 之前的那串字符串就是你的APPID,)

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 = @支付结果:成功!; break;

case -1: payResoult = @支付结果:失败!; break;

case -2: payResoult = @用户已经退出支付!; break;

default: payResoult = [NSString stringWithFormat:@支付结果:失败!retcode = %d, retstr = %@, resp.errCode,resp.errStr]; break;

}

}

}

6、 必须填写的参数

appid、partid(商户号)、prepayid(预支付订单ID)、noncestr(参与签名的随机字符串)、timestamp(参与签名的时间戳)、sign(签名字符串)

7、 核心代码

#pragma mark 微信支付方法 - (void)WXPay{

//需要创建这个支付对象 PayReq *req = [[PayReq alloc] init];

//由用户微信号和AppID组成的唯一标识,用于校验微信用户 req.openID = @"";

// 商家id,在注册的时候给的 req.partnerId = @"";

// 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你 req.prepayId = @"";

// 根据财付通文档填写的数据和签名 //这个比较特殊,是固定的,只能是即req.package = Sign=WXPay req.package = @"";

// 随机编码,为了防止重复的,在后台生成 req.nonceStr = @"";

// 这个是时间戳,也是在后台生成的,为了验证支付的 NSString * stamp = @""; req.timeStamp = stamp.intValue;

// 这个签名也是后台做的 req.sign = @"";

//发送请求到微信,等待微信返回onResp [WXApi sendReq:req];

}

8、后台返回的JSON数据

{ "appid": "wxb4ba3c02aa476ea1", "noncestr": "d1e6ecd5993ad2d06a9f50da607c971c", "package": "Sign=WXPay", "partnerid": "10000100", "prepayid": "wx20160218122935e3753eda1f0066087993", "timestamp": "1455769775", "sign": "F6DEE4ADD82217782919A1696500AF06"

}

注意事项:

1.如果支付完成后,一直留在微信,那就检查下URLType中的Scheme设置问题。

2.能够打开微信客户端,但是打开后只有中间一个白色的 “确定按钮”,点击后会回到客户端上,如果是这样,那应该是prepayid 参数的问题,过期了,或者不是真实的id。代码没有问题的。特别注意的是,微信要两次签名。

3.如果APP里面使用了友盟或者ShareSDK做分享,那就不用再导入SDK了,否则会出现一些诡异的问题,例如无法调起手机微信客户端、无法调起微信客户端web页面,调起了但是一闪而过。。。这都基本上都是因为分享的SDK里面已经包括了微信的SDK。所以如果出现诡异的错误了看看是不是两个冲突了!

4.微信支付的单位是分。

转载于:https://www.cnblogs.com/yuhao309/p/7280665.html

iOS开发技术之微信支付相关推荐

  1. iOS开发集成第三方微信支付和分享问题

    前言 直入主题 有关微信支付问题 在这里就不再介绍有关微信支付申请的流程了,小白可以参看微信开放平台和微信服务号也可申请微信支付接口.这里是微信官方给的微信支付接入指南(然而并没有太大用处) 1. A ...

  2. Android和IOS 调用 支付宝和微信 支付方法

    Android和IOS 调用 支付宝和微信 支付方法 转载于:https://www.cnblogs.com/huangzineng/p/7235705.html

  3. iOS开发技术-实验一-简易计算器实现

    课程名称 iOS开发技术 开发第一个Swift程序 一. 实验目的和要求 目的: 1)了解macOS程序开发过程: 2)学习使用Swift开发工具: 3)学习Swift语法: 4)体会新式语法的特点: ...

  4. php android 微信支付,Android_Android实现微信支付功能,开发Android APP微信支付功能, - phpStudy...

    Android实现微信支付功能 开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单.第二步生成微信支付参数.第三步调起微信APP支付.除了需要审核通过的APP应用外,还需要 ...

  5. 用PHP开发APP端微信支付

    用PHP开发APP端微信支付的一点个人心得 最近因为公司需求,要开发APP端上的微信支付,看了微信文档,感觉还不错,没有遇到太大的坑,需要注意的点不算太多. 写一个记事文档,作为备忘录. APP支付流 ...

  6. android仿支付提现功能,Android应用开发Android 仿微信支付密码界面

    本文将带你了解Android应用开发Android 仿微信支付密码界面,希望本文对大家学Android有所帮助. 使用 Bundle bundle = new Bundle(); bundle.put ...

  7. iOS开发:集成微信 SDK 支付篇

    原文链接: https://cainrun.github.io 原文作者: Cain 作者感言 惯例, 开头都是要说些东西的了, 随着现在的App越来越商业化, 很多公司的App都会集成第三方的支付S ...

  8. Hbuilder 开发IOS 和 Android申请微信支付?那些懵逼的事?

    首先在 manifest.json里SDK配置选项里先勾选上 微信支付 或者支付宝支付 然后https://open.weixin.qq.com/ 进入微信开发者平台,注册登录,成为开发者 选择移动应 ...

  9. iOS资源帖-优秀博客、iOS开发技术文、学习网站

    原链接:https://www.jianshu.com/p/619c61d9c8fb 一些博客 王巍 Objc中国发起人.Line工程师 ibireme YYKit作者 bang JSPatch作者 ...

最新文章

  1. \r \r\n \t的区别
  2. 莎拉波顿,莎曼莎考克斯——英伦设计VS美国设计
  3. 我的存储解决方案理论
  4. Git 设置 SOCKS 代理
  5. fread rb与r,wb,w的区别
  6. 40 FI配置-财务会计-固定资产-组织结构-创建屏幕格式规则
  7. 获取文件当前地址GetModuleFileName函数
  8. Windows Print Spooler 远程代码执行漏洞(CVE-2021-34527)
  9. 浮沉11年 | 一个互联网老兵的自白书
  10. #6282. 数列分块入门 6
  11. 【Linux】修改权限命令chmod用法示例
  12. 软件测试工程师简历项目经验怎么写?一千个软件测试简历范文模板
  13. Web程序设计(第三版)课后答案
  14. 贯穿时域与频域的方法——傅立叶分析(直观理解+Matlab实现)
  15. 柯美smb扫描出现服务器连接错误_柯尼卡美能达smb扫描设置方法是什么
  16. SSM框架练手项目【虎牙个人博客】手把手带你搭建自己的个人博客
  17. Twitter Inc.(TWTR)2020年第三季度收益电话会议记录
  18. CUDA C++ Programming Guide——编程模型
  19. 大学应该教会学生什么?
  20. .net 汉字转拼音 - 输入汉字获取其拼音

热门文章

  1. php的div和p的区别,p标签与div标签区别
  2. mysql providername_c#访问各数据库的providerName各驱动-阿里云开发者社区
  3. 你知道面试必问的AOP吗(2),我在华为做Java外包的真实经历
  4. 【金三银四】java多线程并发编程pdf
  5. python【力扣LeetCode算法题库】8-字符串转换整数 (atoi)
  6. python【蓝桥杯vip练习题库】BASIC-27 2n皇后问题(八皇后问题 搜索)
  7. lay和lied_lie和lay的区别和用法是什么
  8. mac mysql本地连接数_如何用command line链接mysql
  9. java用if判断输入字符_JAVA中如何判断一个输入是数字还是字符串
  10. 百度李彦宏携三人赴港二次上市,网站推广之下百度的未来愈加可期