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后,进行接口调用,有以下前提:

  1. access_token有效且未超时;
经验分享 程序员 微信小程序 职场和发展