Java关于微信的登录和支付
1、手机号或者邮箱注册
优点: 1)企业获取了用户的基本资料信息,利于后续业务发展 推送营销类信息 2)用户可以用个手机号或者邮箱获取对应的app福利 注册送优惠券 3)反馈信息的时候方便,直接报手机号即可 账户出问题,被盗等 缺点: 1)步骤多 2)如果站点不安全,如站点被攻击,泄漏了个人信息,如手机号,密码等 3)少量不良企业贩卖个人信息,如手机号
2、OAuth2.0一键授权登录
3、选择方式:
1)看企业和实际业务情况 2)务必区分,普通密码和核心密码
在这里插入图片描述
1、微信开放平台介绍(申请里面的网站应用需要企业资料)
2、什么是appid、appsecret、授权码code
appid和appsecret是 资源所有者向申请人分配的一个id和秘钥 code是授权凭证,A->B 发起授权,想获取授权用户信息,那a必须携带授权码,才可以向B获取授权信息 (你要从我这里拿东西出去,就必须带身份证)
3、先仔细阅读下微信开放平台 官方给出的微信登录开发指南:
在这里插入图片描述
为测试方便,这里给大家提供一张数据库user表:
Dump of table user
------------------------------------------------------------
1、区分角色 用户,第三应用,微信开放平台
2、如果想看时序图知识,请跳转到微信支付章节,时序图知识讲解
3、扫码 url 实例:
在这里插入图片描述
下面画一个流程图对比着官方给的时序图再进一步理解下这个过程:
在这里插入图片描述
第一步:请求CODE
参数说明
参数 是否必须 说明 appid 是 应用唯一标识 redirect_uri 是 请使用urlEncode对链接进行处理 **response_type ** 是 填code scope 是 应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login state 否 用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验 返回说明
用户允许授权后,将会重定向到redirect_uri的网址上,并且带上code和state参数
redirect_uri?code=CODE&state=STATE 1 若用户禁止授权,则重定向后不会带上code参数,仅会带上state参数
redirect_uri?state=STATE 1 第二步:通过code获取access_token
通过code获取access_token
正确的返回:
{ “access_token”:“ACCESS_TOKEN”, “expires_in”:7200, “refresh_token”:“REFRESH_TOKEN”, “openid”:“OPENID”, “scope”:“SCOPE”, “unionid”: “o6_bmasdasdsad6_2sgVt7hMZOPfL” } 1 2 3 4 5 6 7 8 参数说明
参数 说明 access_token 接口调用凭证 expires_in access_token接口调用凭证超时时间,单位(秒) refresh_token 用户刷新access_token openid 授权用户唯一标识 scope 用户授权的作用域,使用逗号(,)分隔 unionid 当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。 错误返回样例:
{“errcode”:40029,“errmsg”:“invalid code”} 1 获取用户个人信息(UnionID机制)
接口说明
请求说明
参数 是否必须 说明 access_token 是 调用凭证 openid 是 普通用户的标识,对当前开发者帐号唯一 lang 否 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语,默认为zh-CN 返回说明
正确的Json返回结果:
开发者最好保存用户unionID信息,以便以后在不同应用中进行用户信息互通。
错误的Json返回示例:
{ “errcode”:40003,“errmsg”:“invalid openid” } 1 2 3 第三步:通过access_token调用接口
获取access_token后,进行接口调用,有以下前提:
- access_token有效且未超时;