java springboot 如何实现小程序支付

今天给大家分享java小程序支付

首先我们学习任何东西要先看官网

下面是支付业务流程

我们具体用代码去实现上面的业务流程

功能截图

代码截图

复制代码
 pay(){
    //调用后台生成订单
    var orderNumber = "20210101123456";
    var amount = 0.01;


    WxPay.wxpay(app, amount, orderNumber, '支付测试', function(code) {
      // 下单成功,跳转到订单管理界面
      if (code == 0) {
        
      }
    });
  },

function wxpay(app, money, orderNum, goodsName, callback) {
  wx.request({
    header: {
      "token": app.globalData.token
    },
    url: app.globalData.domain + '/api/pay/wechat/unifiedOrder',
    data: {
      storeId: app.globalData.storeId,
      orderNum: orderNum,
      totalAmount: money,
      goodsName: goodsName
    },
    success: function (res) {
      if (res.data.code == 0) {
        // 发起支付
        wx.requestPayment({
          timeStamp: res.data.data.timeStamp,
          nonceStr: res.data.data.nonceStr,
          package: res.data.data.package,
          signType: 'MD5',
          paySign: res.data.data.paySign,
          fail: function (resp) {
            wx.showToast({
              title: '支付失败',
              icon: 'none'
            })
            callback(1);
          },
          success: function () {
            wx.showToast({
              title: '支付成功',
              icon: 'none'
            })
            callback(0);
          }
        })
      } else {
        wx.showToast({
          title: res.data.msg,
          icon: 'none'
        })
        callback(1);
      }
    }
  })
}

/**
     * 统一下单(详见https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1)
     * 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"
     * 接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
     *
     * @param request 请求对象,注意一些参数如appid、mchid等不用设置,方法内会自动从配置对象中获取到(前提是对应配置中已经设置)
     */
    @GetMapping("/unifiedOrder")
    public R unifiedOrder(@RequestAttribute("userId") Long userId, String orderNum, BigDecimal totalAmount, String goodsName, HttpServletRequest req) throws WxPayException {
    	WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
    	request.setOutTradeNo(orderNum);
    	MemberEntity member = memberService.queryObject(userId);
    	request.setOpenid(member.getOpenid());
    	request.setBody(goodsName);
    	request.setNotifyUrl(notifyUrl);
    	request.setTotalFee(totalAmount.multiply(new BigDecimal(100)).intValue());
    	request.setSpbillCreateIp(IPUtils.getIpAddr(req));
    	request.setTradeType("JSAPI");
    	WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(request);
    	
    	String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
        String nonceStr = String.valueOf(System.currentTimeMillis());
    			
    	//signKey 商户平台设置的密钥key
    	//签名字段:appId,timeStamp,nonceStr,package,signType
    			
    	Map params = new HashMap();
    	params.put("appId", wxPayService.getConfig().getAppId());
    	params.put("timeStamp", timeStamp);
    	params.put("nonceStr", nonceStr);
    	params.put("package", "prepay_id=" + result.getPrepayId());
    	params.put("signType", "MD5");
    	
    	String sign = SignUtils.createSign(params, "MD5",    wxPayService.getConfig().getMchKey(), new String[0]);
    	
    	params.put("paySign", sign);
    	
    	return R.ok().put("data", params);
    }
相关推荐
2301_7807896610 分钟前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
LHICOD23 分钟前
Linux-2
java·linux·后端·jar·vmware·svm·vm
香蕉大香蕉(06敬畏市场)24 分钟前
MySQL 单点详解(03)
java·数据库·mysql·面试·八股·大厂实习
呆呆敲代码的小Y44 分钟前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
水无痕simon1 小时前
3、工程重构
java·spring cloud·重构
阿里云基础软件1 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
李纲明1 小时前
微信小程序真机预览白屏或 request 失败:先核 request 合法域名与 TLS,再查体验版与本地缓存
缓存·微信小程序·小程序·小程序开发·devdiy·真机预览·合法域名
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子2 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger2 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc