[关闭]
@Wahson 2016-11-30T18:21:09.000000Z 字数 3399 阅读 1521

微信公众号开发

前端技术


微信号绑定快塑网系统账号

1、请求访问快塑网页面

  1. https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=${SCOPE}&state=type#wechat_redirect
  2. REDIRECT_URI:回调页地址
  3. SCOPE:根据微信开发者平台,SCOPE有两个取值:snsapi_basesnsapi_userinfoscope=snsapi_base时,微信采用静默授权的方式,自动跳转到回调页(业务页面);scope=snsapi_userinfo是用来获取用户基本信息的,这里需要用户手动同意授权,授权后可以获取用户的基本信息。

2、获取网页授权access_token

  1. https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appid}&secret=${appsecret}&code=${code}&grant_type=authorization_code
  2. code:在【1、请求访问快塑网页面】请求后作为回调请求的参数返回(${redirect_url}/?code=xxxxxxx

3、如果需要获取用户的基本信息,使用scope=snsapi_userinfo,

  1. https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN;
  2. access_tokenopenid:在【2、获取网页授权access_token】请求后返回

4、这里我们不需要获取微信用户的基本信息,在获取网页授权后,微信服务器会返回access_token和openid(微信用户唯一标识)。这里可以根据openid判断用户是否已经绑定了快塑网账号,如果没有绑定,则跳转到我们开发的登录页面,使用快塑账号登录,登录成功后,把openid与此账号的对应关系存到数据库,即完成绑定。下次用户再次访问,就可以根据openid取到快塑账号的信息。

图示:
登录流程图:

Created with Raphaël 2.1.2Startcookie中是否有access_token_md5?根据access_token_md5从db中查找绑定记录绑定记录是否存在?调用微信接口判断access_token是否有效?认证成功,进入业务页面set-cookie:access_token_md5End重新请求授权更新绑定数据请求授权用户登录yesnoyesnoyesno

授权登录过程:

Created with Raphaël 2.1.2微信客户端微信客户端test.isuwang.comtest.isuwang.com微信授权服务器微信授权服务器从分享链接/公众号访问 isuwangredirect to 微信授权服务器请求授权?redirect_uri=test.isuwang.com询问是否授权确认授权redirect to http://test.isuwang.com/?code=xxx授权成功,访问test.isuwang.comask for access_token with codeaccess_token,openidopenid,access_token保存在session中return login.htmlusername,password从session中获取openid等ask for wechat_userinfowechat_userinfo完成绑定;clear sessionset-cookie:access_token_md5绑定成功,跳转到订单页

登陆过程可以尝试使用https,这里有一个免费的https方案(待验证)


快塑网扫码登录

  1. https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN

任务分解:

前端
1. 登录页面开发 1.5d
2. 订单页面开发 1.5d
3. 微信分享链接研究与开发 2d
4. isuwang-app wap改造:前端代码的压缩、混淆;路由改造,访问控制(移到下一期)

服务
1. 数据模型设计 (2h)
2. 微信绑定快塑网接口开发
3. 微信号解绑接口开发

注:用户在修改密码后,需要把绑定信息去掉,让用户重新授权登录;用户在不同设备登录相同的微信账号,是否需要重新授权问题试验

  1. -- 数据模型
  2. use `crm`;
  3. drop table if exists wechat_user_info;
  4. create table wechat_user_info (
  5. `id` INT(11) NOT NULL AUTO_INCREMENT,
  6. `customer_id` INT(11) NOT NULL COMMENT '相关用户id',
  7. `open_id` VARCHAR(255) NOT NULL COMMENT '微信用户的唯一标识',
  8. `access_token` VARCHAR(255) NOT NULL COMMENT
  9. '微信网页授权接口调用凭证',
  10. `access_token_md5` VARCHAR(255) NOT NULL COMMENT
  11. 'access_token+timestamp经过md5处理后的串',
  12. `refresh_token` VARCHAR(255) NOT NULL COMMENT '用户刷新access_token',
  13. `nickname` VARCHAR(20) NULL COMMENT '用户昵称',
  14. `sex` TINYINT(1) NULL COMMENT '用户的性别,值为1时是男性,值为2时是女性,值为0时是未知',
  15. `province` VARCHAR(10) NULL COMMENT '用户个人资料填写的省份',
  16. `city` VARCHAR(10) NULL COMMENT '普通用户个人资料填写的城市',
  17. `headimgurl` VARCHAR(255) NULL COMMENT '用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效',
  18. `privilege` VARCHAR(255) NULL COMMENT '用户特权信息,json数组,如微信沃卡用户为(chinaunicom)',
  19. `unionid` VARCHAR(255) NULL COMMENT '只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段',
  20. `is_valid` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效,0:否;1:是;',
  21. `created_by` INT(11) null,
  22. `created_at` DATETIME NOT NULL DEFAULT now(),
  23. `updated_by` INT(11) NULL,
  24. `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  25. PRIMARY KEY (`id`)
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='用户微信账号关联信息表';

其他:
我们注意到有些网站,如果授权链接是从微信浏览器以外的浏览器发起,网站会提示需要在微信浏览器中访问。这里的判断原理是根据请求头的User-Agent字段。在微信浏览器中访问,User-Agent里会带上"MicroMessenger"。

  1. User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B100 MicroMessenger/6.3.31 NetType/WIFI Language/zh_CN
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注