微信小程序支付+java后台

微信的官方文档在绝大多情况下是非常有用的,可是漏洞也不少,这就让我碰到了一个。
第一步:获取openid。
第二步,也就是统一下单接口,在做这一步前,你必须确保你的商户号已经授权小程序appid,并且开通了微信支付功能,然后为了确保成功,你最好重置一下商户平台-api密钥,好了,至此为止微信小程序开发工具上的东西你都配置齐了,可是成了吗?没有,为啥他还是反复的报:

商户号该产品权限未开通,请前往商户平台>产品中心检查后重试

在多次测试后我开通了微信商户平台-产品中心-JSAPI支付,终于解决了这个问题,可当我回头去确认文档,发现官方根本没有提到小程序需要开通这个功能~
源码
一.微信wxml页面代码

  <button class='submit' bindtap='sub'>提交订单(微信支付)</button>

二.微信js页面代码

调起支付框

  sub: function() {
    wx.request({
      url: 'http://localhost:8070/test/wxPayTest',
      method: "post",
      success: res => { 
        console.log(res.data)
        wx.requestPayment({
          nonceStr: res.data.nonceStr,
          package: res.data.package,
          paySign: res.data.paySign,
          signType: 'MD5',
          timeStamp: res.data.timeStamp,
          success(res) {
            console.log(res.data);
            wx.request({
              url: 'http://localhost:8070/test/wxPayY',
              method: "post",
              success: res => {
                console.log(res);
                wx.showModal({
                  title: '提示',
                  content: '支付成功',
                  showCancel: false,
                })
              }
            })
          },
          fail(res) {
            wx.showModal({
              title: '提示',
              content: '支付失败',
              showCancel: false,
            })
          },
        })
      },
    })
  }

三.java后台

pom.xml引入

        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

MiniprogramConfig

package com.kx.wechatprinting.util;
 
import com.github.wxpay.sdk.WXPayConfig;
import org.apache.commons.io.IOUtils;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class MiniprogramConfig implements WXPayConfig {

    private byte[] certData;

    public MiniprogramConfig() throws Exception {
//        InputStream certStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("cert/miniProgram/apiclient_cert.p12");
//        System.out.println(certStream);
//        this.certData = IOUtils.toByteArray(certStream);
//        certStream.close();
    }

    @Override
    public String getAppID() {
        return "wx4597cf6e16321fcd";
    }  //小程序appid

    @Override
    public String getMchID() {
        return "1543743162";
    }  //商户号

    /** 商户平台-账户中心-API安全中的密钥 */
    @Override
    public String getKey() {
        return "106573123124124sdasdasda213sd";
    }

    @Override
    public InputStream getCertStream() {
        return new ByteArrayInputStream(this.certData);
    }

    @Override
    public int getHttpConnectTimeoutMs() {
        return 0;
    }

    @Override
    public int getHttpReadTimeoutMs() {
        return 0;
    }
}

Testcontroller

 @RequestMapping("/wxPayTest")
    @ResponseBody
    private Map<String, String> createMiniProgramTradePay() throws Exception {
        MiniprogramConfig config = new MiniprogramConfig();
        WXPay wxpay = new WXPay(config);
        long indentCode=new Date().getTime();
        Map<String, String> data = new HashMap<>();
        data.put("appid",config.getAppID());
        data.put("mch_id",config.getMchID());
        data.put("body","支付测试");
        data.put("out_trade_no", indentCode+"");//最好按微信文档来,时间戳加随机序列
        data.put("device_info", "");
        data.put("fee_type", "CNY");
        data.put("total_fee", "1");//1分钱测试
        data.put("spbill_create_ip", "192.168.1.232");
        data.put("notify_url", "https://segmentfault.com/a/1190000014460305");//先随便填一个线上地址
        data.put("trade_type", "JSAPI");//这个不能变
        data.put("openid","asdqweqweqweqweqqwe");
        String nonce_str = WXPayUtil.generateNonceStr();
        data.put("nonce_str",nonce_str);
        String sign = WXPayUtil.generateSignature(data, config.getKey());
        System.out.println(sign);
        data.put("sign",sign);
        System.out.println(data);
        Map<String, String> resp = wxpay.unifiedOrder(data);
        System.out.println(resp);
        if ("SUCCESS".equals(resp.get("return_code"))) {
            //再次签名
             * */
            Map<String, String> reData = new HashMap<>();
            reData.put("appId", config.getAppID());
            reData.put("nonceStr", resp.get("nonce_str"));
            String newPackage = "prepay_id=" + resp.get("prepay_id");
            reData.put("package", newPackage);
            reData.put("signType","MD5");
            reData.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
            String newSign = WXPayUtil.generateSignature(reData, config.getKey());
            resp.put("paySign",newSign);
            resp.put("timeStamp", reData.get("timeStamp"));
            return resp;
        } else {
            throw new Exception(resp.get("return_msg"));
        }

    }

参考文档:https://www.2cto.com/kf/201804/735412.html
好了,到这里就可以拉起支付并付钱了
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值