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

原创 2016年08月29日 20:17:49

前言



直入主题

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


1. APP支付

1.业务流程:(这个很重要)


APP支付时序图

这个图需要看懂:为了各种原因,下单、请求支付、结果回调等一般安排公司后台完成
大致流程如下:

  • 【APP】用户使用商户APP选择商品完成下单
  • 【APP】向公司服务器请求生成支付订单
  • 【服务器】公司服务器调用统一下单接口
  • 【微信完成】生成订单返回预支付信息(prepay_id)给公司服务器
  • 【服务器】根据prepay_id生成带签名的支付信息,返回给移动端
  • 【微信APP】微信授权需用户确认
  • 【APP】通过公司服务器回调参数,调用微信SDK发起支付请求
  • 【微信APP】向微信服务器发送请求,返回支付授权
  • 【微信APP】用户确认支付,输入密码,提交微信服务器授权
  • 【微信服务器】验证授权,异步通知公司服务器和移动端APP
  • 【APP】可向公司服务器查询订单信息
    需要查看官方文档,请点击这里
    2.iOS开发xCode配置环境
    有关demo下载,根据本文_作者demo iOS微信官方demo
  • 向微信注册你的应用程序id,具体教程可点击这里
  • 下载"微信SDK",截止今日SDK已经更新到1.7.1已支持ipv6的。
  • 使用xcode新建一个工程,将libWeChatSDK.a,WXApi.h,WXApiObject.h三个文件添加到工程中,如下图:

    导入SDK文件
  • 添加依赖库:
    SystemConfiguration.framework,
    libz.tbd,
    libsqlite3.0.tbd,
    libc++.tbd.
    CoreTelephony.framework(不添加会报这个错误
    "_OBJC_CLASS_$_CTTelephonyNetworkInfo", referenced from:)

    需要添加库
  • 允许http请求,编辑Info.plist,在其中添加
    <key>NSAppTransportSecurity</key><dict> <key>NSAllowsArbitraryLoads</key> <true/></dict>

    配置http请求
  • 配置URL scheme(应用跳转返回应用标识)
    还记得你在微信注册应用分配给你的id麽?就是需要这个东西


    查看微信AppID


    填写完成大概就是这样


    配置scheme
  • 这里需要注意一下在iOS9以后,唤起另一个APP时(此时是欢迎微信第三方APP完成支付)需要在info.plist中配置一下
    LSApplicationQueriesSchemesiOS9之后才会需要,iOS9之后提高了APP的安全性,需要给出一个类似白名单的东西,在白名单里面的才能打开APP。不然报错:
    -canOpenURL: failed for URL: "OpenAppTest://mark?id=007" - error: "This app is not allowed to query for scheme OpenAppTest"
    配置结束~应该就是这个样子~


    配置白名单

配置开发环境遇到的各种坑:
1.到此开发环境已经全部结束了,至于有些导入依赖库遇到的.dylib文件都是很老的版本了。xcode7.0之后导入.tbd即可。
2.至于有关在Build Setting的Search Paths中添加我们刚刚导入的SDK文件有关问题都不需要做了,Xcode都已经帮我们处理好了。至少使用xcode7.0之后都已经帮我们搞定了,在这里,不得不说微信这部分文档确实很老了。
......

到此为止,有关微信分享好友、朋友圈、收藏等第三方支付环境配置问题已经结束~接下来正式码砖了~


3.SDK使用

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;方法中向微信终端注册你的AppID


    注册AppID
  2. 配置AppDelegate中的代码,效果图见后
    (1).导入头文件
    #import "WXApi.h"
    #import "WXApiObject.h"
    (2). 重写AppDelegate中handleOpenURLopenURL方法:(多个应用之间的调用)
    (3). 在需要与微信交互的地方,遵守WXApiDelegate协议,实现协议中的两个方法(处理向微信发送、微信返回结果回调)
    - (void)onReq:(BaseReq *)req- (void)onResp:(BaseResp *)resp;


AppDelegate

附: 需要给微信发消息,则需要调用WXApi的sendReq函数(例如:微信分享好友、朋友圈等时)
- (BOOL)sendReq:(BaseReq *)req
3.生成订单

用户选择商品后,在这里向后台服务器发送下单请求,服务器将生成订单信息等微信所下发的预支付id、签名等信息。然后发起支付调用surePay方法

4.完成支付请求

后台生成prepayid、签名sign后调用微信SDK发起支付

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

//应用id
req.openID = kWXAPP_ID;

// 商家商户号
req.partnerId = kWX_PARTNERID;

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

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

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

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

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

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

5.支付结果回调
还记得在AppDelegate中配置的回调方法麽- (void)onResp:(BaseResp*)resp;
如下图:


回调结果处理

有关demo下载,根据本文_作者demo iOS微信官方demo

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS集成微信支付问题, 友盟SDK有干扰或者说是冲突的解决

—— 项目中遇到的问题 原因描述: 由于前期的app开发由外包完成, 所以并不清楚项目中用的友盟SDK的版本. 导致在集成微信支付时, 调起微信app并没有反应, 或者说是调起失败. 解决办法:...
  • sinat_30162391
  • sinat_30162391
  • 2016年01月27日 12:25
  • 3862

独立集成QQ和微信分享的回调冲突问题

QQ登录认证后会触发appDelegate 的  - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sour...
  • jiang314
  • jiang314
  • 2016年08月30日 10:15
  • 2617

不接入微信sdk,在APP中实现微信分享,支付

前段时间在很多地方接入了微信的sdk,发现过程比较繁琐,此外因为导入的sdk比较大会影响最终APP打包的体积,所以就有了不接入sdk也实现相同的功能的想法。 要实现这个目标我个人认为最困难的地方是不知...
  • qq_30970529
  • qq_30970529
  • 2016年03月25日 18:06
  • 2548

关于多应用(不同包名)中三方登录和支付的一点坑

最近在做项目的时候有一个需求:公司同一个应用需要发布多个app(相同功能代码),微信登录、QQ登录、微博登录和手机登录之后是同一个用户信息,且均能实现支付宝、微信支付功能。手机登录不必多说,手机号密码...
  • Android_caishengyan
  • Android_caishengyan
  • 2016年10月09日 13:05
  • 2983

微信登录,分享,支付,等的白屏闪屏等问题

首先以微信的第三方登录为例: 微信登录官方文档地址:点击进入 一、准备工作 在进行微信登录之前,首先要在微信开放平台注册开发者账号,并拥有一个已审核通过的移动应用,并获得相应的AppID和App...
  • caojing3231509
  • caojing3231509
  • 2017年08月02日 15:51
  • 2031

iOS开发之第三方支付微信支付教程,史上最新最全第三方微信支付方式实现、微信集成教程,微信实现流程

本章项目demo: https://github.com/zhonggaorong/weixinLoginDemo 本章不讲解: 微信sdk的集成 , 项目集成的文章请参照 (包含微信登录)...
  • zhonggaorong
  • zhonggaorong
  • 2016年07月01日 14:09
  • 6691

iOS开发之微信集成支付

原文链接:http://www.cnblogs.com/oc-bowen/p/5547374.html iOS开发支付集成之微信支付 这一篇是《iOS开发之支付》这一部分的继支...
  • LitleLee1005
  • LitleLee1005
  • 2016年11月30日 10:30
  • 186

iOS开发集成微信支付

首先需要理清楚流程: 1、用户使用APP客户端,选择商品下单。 2、商户客户端(就是你做的APP)将用户的商品数据传给商户服务器,请求生成支付订单。 3、商户后台调用统一下单A...
  • huanghaiyan_123
  • huanghaiyan_123
  • 2016年06月23日 12:35
  • 418

iOS开发支付集成之微信支付

这一篇是《iOS开发之支付》这一部分的继支付宝支付集成,银联支付集成第三篇,微信支付。在集成的时候建议都要去下载最新版的SDK,因为我知道的前不久支付宝,银联都更新了一次,微信的不太清楚更新了没。 ...
  • Companion_1314
  • Companion_1314
  • 2016年08月23日 18:04
  • 2510

iOS开发支付集成之微信支付

作者:WK_IOSDevelpoer 原文链接:http://www.jianshu.com/p/1c1c834b6d52 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台...
  • MinggeQingchun
  • MinggeQingchun
  • 2016年07月13日 14:44
  • 427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS开发集成第三方微信支付和分享问题
举报原因:
原因补充:

(最多只允许输入30个字)