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

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


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

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中的处理方法可以用下图来简单说明:

难看,勿喷
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容