美文网首页iOS开发程序员半栈工程师
微信三方登录、分享、支付集成

微信三方登录、分享、支付集成

作者: 安静守护你 | 来源:发表于2017-09-25 11:40 被阅读444次

目前手头的项目终于算是收尾了,在项目进行的过程中遇到的问题在接下来的时间里,我会抽空整理出来,免得以后踩坑,也是为了便于以后的开发工作。


这次就主要说一下微信三方登录、分享和支付的集成工作

1.微信三方库的集成

集成三方库就不用多说了,主要就是手动集成和使用pod导入。详情可看微信开发者平台官方文档介绍

2.微信三方登录的实现

微信三方库成功加入到当前项目中之后,恭喜你已经完成了一半的工作了。接下来我们来看微信三方登录的实现。先来一张微信官方的时序图:


登录授权时序图

从图中我们可以看出,实现微信登录主要分为三大步骤(简称三步走),即:

  1. 第三方应用(即自己的应用)发起微信授权登录请求,用户允许授权后,微信会重定向到自己的应用,并且返回授权临时票据code参数;
  2. 第三方应用利用授权临时票据code、AppID、AppSecret等来换取access_token(这个token是微信用户三方授权登录的token,别跟自己应用的token搞混淆);
  3. 通过access_token调用接口,获取用户基本数据资源。

只要搞懂把握好这三步走战略,胜利之门始终为你敞开。
接下来详细说说三步走战略的具体内容:

a. 请求code

要想得到授权临时票据,就需要自己的应用想微信终端发送请求并拉起微信应用进行授权登录,用户确认后,微信将会重定向返回到自己的应用,并返回code。
iOS平台授权登录代码示例:

  -(void)sendAuthRequest { 
    //构造SendAuthReq结构体 
    SendAuthReq* req =[[[SendAuthReq alloc ] init ] autorelease ];
    req.scope = @"snsapi_userinfo" ;
    req.state = @"123" ;
    //第三方向微信终端发送一个SendAuthReq消息结构
    [WXApi sendReq:req]; 
  }
参数说明 返回参数说明
b. 获取access_token

获取到code之后,就开始三步走战略的第二步了,获取access_token:

  通过请求微信提供的url来请求获取到access_token
  https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

很明显的,这就是个GET请求,从url中?之后的就是请求所需要的参数,分别是appid、secret、code和grant_type,只需要替换=后面的即可。

参数说明 返回说明 返回参数详情

至此,我们的第二步战略已经结束

c. 获取用户基本信息

通过上面的第二步走方针,我们获取到了access_token,通过access_token可以换取用户基本信息(用户昵称、性别、省、市、国家、头像等信息),跟第二步走很类似,也是要请求 微信给出的一个url来请求获取到数据。

   同样还是GET请求
  https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数说明 返回说明 返回参数详情

到这里微信的授权登录三步走流程已经结束,通过三步走,我们也获取到了access_token、openid、unionid和其他基本信息,后续的登录流程就要根据实际需求来了。

--------我是后续补充的--------

在使用微信三方登录的时候,往往要先判断一下本机是否安装了微信APP客户端,在WXApi中也封装了检测是否安装微信客户端的方法(是个类方法)。

/*! @brief 检查微信是否已被用户安装
 *
 * @return 微信已安装返回YES,未安装返回NO。
 */
+(BOOL) isWXAppInstalled;

直接使用[WXApi isWXAppInstalled]就可以判断是否已经安装了微信客户端
但是,但是,但是:前提是你要把微信添加到白名单中,不然即便你的手机上安装了微信客户端,也同样的返回的是NO,怎么添加白名单,简单地说,就是在plist文件中添加如下代码:

    <key>LSApplicationQueriesSchemes</key>
    <array>    
        <string>weixin</string>
    </array>

3.微信分享的实现

微信分享及收藏是指第三方App通过接入该功能,让用户可以从App分享文字、图片、音乐、视频、网页至微信好友会话、朋友圈或添加到微信收藏。

微信分享的最主要流程就是根据实际需求,把要分享的DD封装成特定类型的数据,然后发送调起微信分享即可。

  分享或收藏的目标场景,通过修改scene场景值实现。
  发送到聊天界面——WXSceneSession
  发送到朋友圈——WXSceneTimeline
  添加到微信收藏——WXSceneFavorite
文字类型分享示例 图片类型分享示例 音乐类型分享示例 视频类型分享示例 网页类型分享示例

4.微信支付的实现

支付的最主要流程一般都是放在后台服务器进行的,在客户端主要负责的任务就是在后台统一下单后,根据返回的参数调起微信应用进行付款操作,然后再通过后台查询实际支付结果(微信回调也有支付结果,不过最好是以后台查询为准)。

字段名 变量名 类型 必填 示例值 描述
应用ID appid String(32) wx8888888888888888 微信开放平台审核通过的应用APPID
商户号 partnerid String(32) 1900000109 微信支付分配的商户号
预支付交易会话ID prepayid String(32) WX1217752501201407033233368018 微信返回的支付交易会话ID
扩展字段 package String(128) Sign=WXPay 暂填写固定值Sign=WXPay
随机字符串 noncestr String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。推荐随机数生成算法
时间戳 timestamp String(10) 1412000000 时间戳,请见接口规则-参数规定
签名 sign String(32) C380BEC2BFD727A4B6845133519F3AD6 签名,详见签名生成算法
名称 描述 解决方案
0 成功 展示成功页面
-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。

返回结果

名称 描述 解决方案
0 成功 展示成功页面
-1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
-2 用户取消 无需处理。发生场景:用户不支付了,点击取消,返回APP。

总结

与微信相关的三方登录授权、微信支付、微信分享已经全部说完,但是还有一个很大的问题,假设一个应用中有很多地方都需要微信分享或者支付,很多页面都将会写入很多重复性的代码,不利于后期维护和管理,并且微信SDK的回调是在appdelegate中,这样就要使用通知等手段来及时的获取到支付或分享结果,如果这样,弊端很多。你们可以下载微信官方的demo,看看官方demo是怎么处理这些逻辑的,自己也可以参照(最简单的方法就是把微信官方demo中的那个单例类拉到自己项目中用)demo用更好的方法来处理。
官方demo中的处理方法可以用下图来简单说明:

难看,勿喷

相关文章

  • Swift开发 微信支付

    引言 集成微信SDK就不废话了,在微信第三方登录做了介绍,传送门:微信第三方登录 签名 微信支付个人觉得最难的就是...

  • Android 第三方登录、分享、支付、签约集成

    目前很多 APP 都添加了第三方授权功能,包括登录、分享、支付、签约等等。其中集成较多的平台是微信、QQ、支付宝、...

  • iOS第三方平台集成组件化

    背景 项目使用到了一些第三方平台的登录、分享、支付功能,包括了微信、微博、QQ平台登录分享和支付宝、微信平台的支付...

  • iOS-三方服务相关

    本篇涵盖支付 、登录、分享细节过程等. 1.两步快速集成使用ShareSDK、微信支付、支付宝支付2.iOS 微信...

  • 微信平台简介

    微信开放平台 移动应用网站应用第三方平台功能微信登录 微信支付 分享收藏微信登录N/A其他拉起小程序 图像识...

  • iOS 微信 QQ 微博 分享 登录& 微信 支付宝支付

    基于友盟集成QQ,微信 ,微博 分享和登录功能,支付宝和微信支付功能。不包含IDFA,已经适配iPhone X,兼...

  • 微信三方登录、分享、支付集成

    目前手头的项目终于算是收尾了,在项目进行的过程中遇到的问题在接下来的时间里,我会抽空整理出来,免得以后踩坑,也是为...

  • iOS 苹果登录及第三方登录

    应用集成第三方登录,iOS 13之后必须集成苹果登录,否则审核会被拒的。较为常用的第三方登录是微信和QQ,微信不提...

  • 微信原生分享链接获取网络图片处理

    集成原生微信分享,要保证分享的图片大小不能超过32K 做完微信登录和微信分享之后,经验就是能用第三方,尽量用第三方...

  • 苹果登录集成以及过审避坑

    一、什么时候需要集成苹果登录?有第三方登录时便需要集成苹果登录,如含微信登录功能; 二、苹果登录集成步骤:1、进入...

网友评论

  • 棍武中原:楼主,我获取token 的时候errmsg = "invalid grant_type, hints: [ req_id: Qma0884th19 ]";报这个错,不知道为什么啊
    安静守护你:invalid grant_type 无效的grant_type 文档上有说过,grant_type就填写 authorization_code 这个固定值就OK了

本文标题:微信三方登录、分享、支付集成

本文链接:https://www.haomeiwen.com/subject/lhbfextx.html