微信支付篇---微信账号登陆小程序,微信支付篇,小程序微信账号登录指南

马肤
摘要:用户可以通过微信账号登录小程序,使用微信支付功能进行便捷支付。该功能为用户提供了更加便捷的支付方式,无需跳转到其他支付页面即可完成支付操作。微信小程序中的微信支付功能,极大提升了用户体验,成为现代生活中不可或缺的支付方式之一。

为了实现支付流程,必须为小程序实现微信登录功能,回顾创建支付订单的时序图,小程序首先发起请求给商户系统,请求创建支付订单,模拟请求的客户端程序如POSTMAN或HTTPClient并非真实用户,因此商户系统需要验证请求的合法性。

微信支付篇---微信账号登陆小程序,微信支付篇,小程序微信账号登录指南 第1张

验证请求是否来自真实用户,主要依赖于两样东西:OpenID和Token字符串,当用户通过微信账号登录小程序时,系统会生成一个唯一的OpenID值,商户系统会记录这个值,如果请求中没有包含OpenID值或者值与数据库不匹配,那么商户系统应忽略该请求,仅校验OpenID是不够的,商户系统还需确认用户是否已登录小程序,以确保下单支付的是真实用户。

在我们的后端项目中,整合了Shiro和JWT技术,成功登录小程序的用户,后端系统会返回一个Token字符串,小程序每次发起请求时都需要携带这个令牌字符串,以告知后端系统自己已经登录,后端系统也会验证Token字符串的有效性和是否过期。

具体实现流程如下:

1、表单校验:使用ValidatorUtils.validateEntity(form)对传入的表单数据进行校验。

2、获取微信登录信息:构造一个包含微信小程序的appId、appSecret、用户登录凭证js_code和授权类型grant_type的请求参数map。

在构造请求参数时,核心代码为:

map.put(“appid”, appId)将appid键和appId变量的值放入map中,appid是微信小程序的唯一标识。

map.put(“secret”, appSecret)将secret键和appSecret变量的值放入map中,appSecret用于验证请求的安全性。

微信支付篇---微信账号登陆小程序,微信支付篇,小程序微信账号登录指南 第2张

map.put(“js_code”, form.getCode())将js_code键和form.getCode()返回的值放入map中,js_code是小程序前端通过微信API获得的临时授权凭证。

map.put(“grant_type”, “authorization_code”)指定授权类型为授权码模式。

3、发送请求:使用HttpUtil.post(url, map)向微信的jscode2session接口发送请求,获得响应,响应通常是一个JSON格式的字符串,包含access_token和openid。

4、解析响应、检查openid、用户信息查询与创建、生成Token:将响应解析为JSON对象,获取openid,检查其是否存在,如果不存在则返回错误信息,查询数据库中是否存在对应用户,不存在则创建新用户并保存,使用jwtUtils.generateToken(id)生成JWT Token。

5、准备返回结果:将生成的Token和过期时间放入Map中,使用R.ok(result)返回成功响应。

核心实现代码如下:

@RestController
@RequestMapping("/app/wx")
@Api("微信业务接口")
public class WxController {
    // 相关属性注入...
    @PostMapping("login")
    @ApiOperation("登录")
    public R login(@RequestBody WxLoginForm form) {
        // 表单校验...
        // 构造请求参数map...
        String response = HttpUtil.post(url, map); // 发送请求
        JSONObject json = JSONUtil.parseObj(response); // 解析响应
        String openId = json.getStr("openid"); // 获取openid
        // 验证openid...
        // 查询或创建用户...
        // 生成Token...
        Map result = new HashMap(); // 准备返回结果
        result.put("token", token); // 放入Token和过期时间
        return R.ok(result); // 返回成功响应
    }
}

0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码