概要
开发中涉及到登录界面,因为使用原生APP账号登录在小程序中几乎不可行,所有急需开发
使用微信登录微信小程序的接口
一 涉及API(application programming interface)
wx.login()
调用接口获取登录凭证code, 进而换取用户登录态信息,包括
(1)用户的唯一标识openid;
(2)本次登录的会话密钥session_key
用户数据的加解密通讯需要依赖会话密钥完成
code说明:用户允许登录后,回调内容会带上code,有效期5分钟,
开发者需要将code发送到服务器后台,使用code换取openid, session_key
code.png
code 换取session_key
是一个https接口,开发者服务器使用登录凭证code获取session_key , openid
session_key不应该在网络上传输(不要传输到客户端),
因为session_key是对用户数据进行加密签名的密钥
接口URL
https://api.weixin.qq.com/sns/jscode2session
?appid=APPID
&secret=SECRET
&js_code=JSCODE
&grant_type=authorization_code
四个参数说明:
(1)appid, 小程序唯一标识
(2)secret 小程序的app 密钥
(3)js_code 登录时候获取的code
(4)grant_type 授权类型,填写为 authorization_code
appid_and_secret.png
二 登录流程
(1)客户端(小程序)获取code,传送到后台服务器
(2)后台服务器获取code,结合appid,appsecret获取openid,session_key;
(3)后台服务器根据openid, session_key生成唯一的tokenID,
tokenID需要保证唯一性,设置一定时间的有效性
(4)后台服务器生成的tokenID,需要存储于相应的数据库中
(5)将tokenID返回到客户端(小程序),
小程序将得到的tokenID存入本地缓存中,用于后续用户获取
openID,session_key的凭证
三 微信支付
1 接口 wx.requestPayment()
包含参数:
timeStamp 当前的时间
nonceStr 随机的字符串
package 统一下单接口返回的prepay_id 参数值
signType 签名算法,MD5
paySign 签名
2 支付开发文档
2.1 基础知识-支付方式
刷卡支付,扫码支付,公众号支付,App支付,小程序支付
分别介绍:
(1)刷卡支付: 用户展示微信钱包内的刷卡条码、
二维码给商户系统扫描,直接完成支付的模式,
线下面对面收银的场景
(2)扫码支付:商户系统按照微信支付协议,生成支付二维码,
用户用微信
扫一扫完成支付的模式,适用于PC网站支付,
实体店单品或者订单支付,媒体广告支付等等场景
(3)公众号支付: 是用户在微信中打开商户的H5页面,
商户在H5页面通过调用微信支付提供的 JSAPI 接口调用
微信支付模块 完成支付
应用场景是: 用户在微信公众号内 进入商家公众号,
打开某个主页面,完成支付
用户的好友在朋友圈,聊天窗口等分享商家页面链接,
用户点击链接打开商家页面,完成支付
将商户页面转换成二维码, 用户扫码后再微信浏览器中
打开页面完成支付
(4)App支付 :移动端支付,是商户通过在移动端应用
App中集成开发的SDK调用微信支付模块完成支付的模式
(5)小程序支付:是商户在微信小程序平台内实现支付功能
2.2基础知识 - 名词解释
(1)[微信公众平台](http://mp.weixin.qq.com):
微信公众账号申请入口和管理后台
商户可以在公众平台提交基本资料,业务资料,财务资料,
申请开通微信支付功能
(2)[微信开放平台](http://open.weixin.qq.com):
商户App接入微信支付开放平台的申请入口,
通过此平台可以申请微信App支付
(3)[微信商户平台](http://pay.weixin.qq.com)
微信支付相关的商户功能集合,包括参数配置,支付数据查询和统计,
在线退款,代金券,立减优惠运营等功能
(4)[微信企业号](http://qy.weixin.qq.com)
企业号的申请入口和管理后台,商户可以在企业号中提交基本资料
等资料申请开通微信支付功能
(5)微信支付系统
完成微信支付流程中涉及的API接口,后台业务处理系统,财务系统,
回调通知系统的总称
(6)[微信小程序](https://mp.weixin.qq.com/debug/wxadoc/dev/)
微信提供给商户实现App的一种轻应用,开发起来简单易用
(7)商户后台系统
商户后台处理业务系统的总称,例如: 商户网站,收银系统,
进销存系统,发货系统,客服系统等等
(8)商户证书
微信提供的二进制文件,商户系统发起和
微信支付后台服务器通信请求的时候,
作为微信支付后台识别商户真实身份的凭据
(9)签名
商户后台和微信支付后台根据相同的密钥和算法生成一个结果,
用于校验双方身份合法性
签名的算法由微信支付制定并公开,常用的签名方式有:
MD5, SHA1, SHA256, HMAC等等
(10)JSAPI网页支付
公众号支付,可以在微信公众号,朋友圈,聊天会话中点击页面链接,
或者用微信扫一扫,扫描页面地址二维码
在微信中打开商户的HTML5页面,在页面下单,完成支付
(11)支付密码
用户开通微信支付时候,单独设置的密码,
用于确认支付完成交易授权,与微信登录密码不相同
(12)Openid
用户在小程序内的身份标识,不同的小程序拥有不同的openid
商户后台系统通过登录授权,支付通知,
查询订单等API可以获取
用户的openid,主要用途判断是否是同一个用户
2.3 基础规范-协议规则
接口规则
传输方式 HTTPS传输
提交方式 POST方法提交
数据格式 提交返回数据是 XML格式, 根节点名为xml
字符编码 UTF-8
签名算法 MD5 后续会有其他算法
签名要求 请求和接收数据需要校验签名
证书要求 调用申请退款 撤销订单接口需要商户证书
判断逻辑 先判断协议字段返回 ,再判断业务返回, 最后判断交易状态
参数规定
body字段格式要求
字段规则 ---商家名称-销售商品类目
样例 ---(罗辑思维-图书)
备注 ---线上电商 ,商家名称必须为实际销售商品的商家
交易金额
默认为人民币交易,接口中参数支付金额单位为分
参数值不能带小数, 对账单中的交易金额单位为元
外币交易的支付金额精确到币种的最小单位,参数值不能带小数点
交易类型
JSAPI---小程序支付统一下单接口 trade_type的传参数可参考此处
货币类型
CNY:人民币
时间
标准北京时间,东八区
时间戳
标准北京时间,东八区 基础单位是秒
商户订单号
商户支付的订单号由 商户自定义生成, 微信支付要求商户订单号 保持唯一性
建议根据系统的时间加上随机序列生成订单号
重新发起一笔支付要使用原订单号, 避免重复支付
已经支付过或者已经调用关闭订单, 撤销的订单号不能重新发起支付
网友评论