`
gl95271983
  • 浏览: 1231 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[PHP教程] php+微信接口开发的微信分销平台拆分讲解(一)微信oauth2接口

 
阅读更多
本文不提供整套系统源码,只会开放部分源码,讲诉开发的经历、思路、问题解答,希望对新手有帮助,至于高手和大神一下而过或留下宝贵意见在此谢过。


废话不多说了开始进入正题。
基础篇
php当前主流WEB开发语言毋庸置疑不用多说。微信接口主要用到微信授权登录接口、微信JSSDK分享接口、微信支付接口,对于微信的一系列接口必须要牢骚一下到处是坑啊。分销系统是一种营销模式以后会解释。首先说一下第一步微信登录(oauth2第三方授权接口),个人认为比较重要的一部,优点用户体验高、安全性高、为后边做分销系统打下便利的基础,缺点只能在微信内置浏览器中访问对于微信外其他方式宣传推广不便利,只能用二维码的方式(生成链接形式的二维码网上第三方工具很多,也可以用程序来实现,有兴趣可以留言)。

首先看一下传说中的微信API接口文档吧,官网文档地址http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html






用该接口必须需要一个认证的服务号、没有的情况下可以申请一个测试账号体验一下但不能宣传推广
关于网页授权回调域名的说明
文档写的比较清楚,在不用第三方平台的情况下,需要配置一下项目需要获取微信用户信息的路径,一二.....级域名都可以。这个比较明朗
再往下看第一遍没看懂,第二遍没看懂。。。。。。项目是一年前开始开发的当时的文档比现在还简陋而且网上可参考的资料很少官方没有实例,还好最后从一篇文章找到蛛丝马迹算是做出来了,牢骚一下

其他说明
先介绍几个参数appid和appsecret在微信公众平台中可以找到很多接口的调用都会用到这两个参数。
最重要的一个参数也是调用授权接口的目的,openid,它是一个微信号对应该公众平台的唯一标示,获取到它就可以认为用户已经微信登录了,后边一切业务流程和数据库记录都是围绕它来建立的。
下面说说如何获取openid和用户基本信息比如头像昵称城市性别等,这是一个比较蛋疼的过程,这么多步骤玩我们呢是吧?给你找个理由是为了安全性考虑吧。我又发牢骚了不好意思。
分三步
1 获取code,啥是code???不知道反正获取到它才能进行下一步
接口地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redire
appid刚才提高过在公众平台里可以找到,redirect_uri是重点它是再用户通过上述的接口地址发出请求到微信的服务器,微信服务器通过GET方式传递一个参数code返回到redirect_uri,用$_GET方式接受一下就可以。scope也是个比较重要的参数他有两种类型snsapi_base、snsapi_userinfo,说说区别如果只想实现微信登录也就是只需要openid那么使用snsapi_base,它的好处是用户在访问时并不知晓你抓取了他的openid。使用snsapi_userinfo除了可以抓取openid以外,还能抓取到更多很多微信用户信息,现在很多微信应用都需要头像和昵称那么直能使用snsapi_userinfo,缺点为会首先弹出微信授权是否允许的页面需经过用户同意才可以进行下一步的操作
如图:







2.获取openid和access_token
通过刚才获取到的code以及appid和appsecret
接口:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
返回的是json格式的数据

3获取头像昵称等...
通过openid和access_token
接口:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
返回的是json格式的数据
参数lang不写的时候默认返回英文数据

实例代码片段
a.php
$url='http://www.xxx.com/b.php';
$url=urlencode($url);
$href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=$url&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
@header("location:$href");

b.php
$code=$_GET['code'];
$url='https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxx&secret=xxx&code='.$code.'&grant_type=authorization_code';
$jsonstr= file_get_contents($url);
$jsonstr = json_decode($jsonstr,true);
$access_token= $jsonstr['access_token'];
$openid=$jsonstr['openid'];
$userurl='https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openid;
$userinfo=file_get_contents($userurl);
$userinfo = json_decode($userinfo,true);

好吧勉强算是实现了。。。。。。。。。。但是经过一段时间的运行抓取信息并不稳定会出现一部分用户没有获取到头像和昵称琢磨了很久不知道问题出现在哪里,在哪里?????
噢出现在 file_get_contents这个函数的问题上,用file_get_contents虽然可以实现但表现的效果极不稳定,后来改用curl就稳定多了但是不会达到100%抓取多方面因素造成的,但基本在可接受范围内。


今天时间有限,分销系统的定义、获取微信用户头像昵称等信息还有另一种方式不需要弹出授权界面、unionid多公众平台开发的时候需要用到、实现持久登录状态需要cookie、以及分销系统用户端的商城部分的购物车实现等内容会在第二次进行讲解。

附系统访问路径二维码一个,大家可以先看一下只能用微信访问,可以提问包括系统架构、前端JS脚本和一系列功能模块的实现问题,我会根据大多数人的需求更改下次更新的内容



  • 大小: 4.1 KB
  • 大小: 12.6 KB
  • 大小: 11.9 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics