当前位置: 首页 > news >正文

微信支付v2

文档: https://pay.weixin.qq.com/wiki/doc/api/index.html

微信小程序:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

需要一个微信认证后的小程序,,还需要一个,在微信商户平台,,开通的商户,,将商户和小程序绑定到一起,,

用户在微信小程序上下单:

  • 需要知道是哪个用户下的单,,也就是openid
  • 需要知道小程序id,,商户id,,根据商户的秘钥key,生成一个签名

签名是为了防止数据别篡改,,,

怎么获取openid:

  @PostMapping("/login")public Map<String,String> login(@RequestBody @Valid WxLoginForm loginForm){String url = "https://api.weixin.qq.com/sns/jscode2session";HashMap<String, Object> map = new HashMap<>();map.put("appid",appid);map.put("secret",secret);map.put("js_code",loginForm.getCode());map.put("grant_type","authorization_code");String response = HttpUtil.post(url, map);JSONObject obj = JSONUtil.parseObj(response);String openid = obj.getStr("openid");if (openid == null || openid.length()==0){throw new ParameterException(99999);}User user = userRepository.findByOpenid(openid);Long uid;if (user ==null){// 注册User newUser = new User();BeanUtils.copyProperties(loginForm,newUser);newUser.setOpenid(openid);userRepository.save(newUser);uid = newUser.getId();}else{// 登录uid = user.getId();}// 生成令牌String token = JwtToken.makeToken(uid);HashMap<String, String> map1 = new HashMap<>();map1.put("token",token);// 根据 主键id生成tokenreturn map1;}

怎么向微信统一下单:
微信SDK中有一个 WXPayConfig抽象类,,继承这个类,,将你的wx支付的配置写进去

// ccWxPayConfig自己的wx配置WXPay wxPay = new WXPay(ccWxPayConfig);// 下单成功会返回一个 prepay_idMap<String, String> result = wxPay.unifiedOrder(map);
// 将prepay_id更新到order中
// 生成前端的数字签名,, 前端生成签名比较麻烦,后端生成之后传递给前端String paySign = WXPayUtil.generateSignature(map2, key);

前端根据回传的信息,请求微信服务器获取支付信息,,,用户确认金额后,选择支付或者取消支付

支付完成后,微信会支付结果通知在这里插入图片描述

如果没有接到通知,,也可以自己主动发出通知:

/*** 主动 去 微信 查询支付状态*/@PostMapping("/updateOrderStatus")@ScopeLevel@Transactionalpublic void updateOrderStatus(String orderNo) throws Exception {// 验证这个订单是不是这个用户的Long uid = LocalUser.getUser().getId();Long orderId = 1L;Order order = orderRepository.findFirstByUserIdAndId(uid, orderId).orElseThrow(() -> new ServerErrorException(9999));HashMap<String, String> map = new HashMap<>();map.put("appid",appid);map.put("mch_id",mchId);map.put("out_trade_no",order.getOrderNo());map.put("nonce_str",WXPayUtil.generateNonceStr());String sign = WXPayUtil.generateSignature(map, key);map.put("sign",sign);WXPay wxPay = new WXPay(ccWxPayConfig);Map<String, String> result = wxPay.orderQuery(map);String returnCode = result.get("return_code");String resultCode = result.get("result_code");if ("SUCCESS".equals(returnCode) && "SUCCESS".equals(resultCode)){String tradeState = result.get("trade_state");if ("SUCCESS".equals(tradeState)){// 交易成功,,更新状态
//                orderRepository.orderRepository.updateOrderStatus(order.getOrderNo(),2);}else{
//                return new UnifyResponse()throw new ServerErrorException(9999);}}}
http://www.lryc.cn/news/188253.html

相关文章:

  • tcpdump(二)命令行参数讲解(一)
  • 10_8C++
  • JVM篇---第七篇
  • 更新Xcode 版本后运行项目出现错误 Unable to boot the Simulator 解决方法
  • winform窗体控件太多显示不过来,怎么实现滚动条
  • WebSocket连接异常 Error parsing HTTP request header Connection reset by peer
  • Spring中shutdown hook作用
  • 关于IvorySQL和OpenGauss包SPEC处理的一些思考
  • 我用PYQT5做的第一个实用的上位机项目(六)
  • 【高级语言程序设计】python函数式编程(一)
  • 使用python查找指定文件夹下所有xml文件中带有指定字符的xml文件
  • flutter实现透明appbar(一)
  • (四)正点原子STM32MP135移植——u-boot移植
  • [计算机入门] 应用软件(办公类)
  • 基于安卓android微信小程序音乐播放器
  • Java的指针、引用与C++的指针、引用的对比
  • 串级/级联控制知识点整理
  • 数据产品读书笔记——认识数据产品经理
  • 从 0 到 1 ,手把手教你编写《消息队列》项目(Java实现) —— 创建虚拟机
  • GIT版本控制--前言
  • 由于 MAC 地址的问题,导致网络不通的原因和分析
  • 游戏开发中的设计模式
  • React核心原理与实际开发
  • Springboot+vue的企业OA管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
  • 3、字符设备驱动框架和开发步骤
  • [MySQL]基础篇
  • Meta Semantic Template for Evaluation of Large Language Models
  • Git相关知识(1)
  • pytorch中nn.DataParallel多次使用
  • 制作电商页面(Html)