首页 >  微信开发 >  微信JSAPI支付获取签名paySign

微信JSAPI支付获取签名paySign

时间:2024-01-07

支付api:JSAPI微信支付文档

一、微信JSPAI客户端(微信)调用支付代码如下

function onBridgeReady() {
      WeixinJSBridge.invoke('getBrandWCPayRequest', {
          "appId": "wx2421b1c4370ecxxx",   //公众号ID,由商户传入    
          "timeStamp": "1395712654",   //时间戳,自1970年以来的秒数    
          "nonceStr": "e61463f8efa94090b1f366cccfbbb444",      //随机串    
          "package": "prepay_id=wx21201855730335ac86f8c43d1889123400",
          "signType": "RSA",     //微信签名方式:    
          "paySign": "oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ\/X+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsOUGRwhudhVf7UcGcunXt8cqNjKNqZLhLw4jq\/xDg==" //微信签名
      },
      function(res) {
          if (res.err_msg == "get_brand_wcpay_request:ok") {
              // 使用以上方式判断前端返回,微信团队郑重提示:
              //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
          }
      });
  }
  if (typeof WeixinJSBridge == "undefined") {
      if (document.addEventListener) {
          document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
      } else if (document.attachEvent) {
          document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
          document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
      }
  } else {
      onBridgeReady();
  } 

二、这段代码中的paySign是怎么获取的呢?

官网讲了一大堆,下面做了总结,直接复制可用

nonceStr:随机字符串,用一段随机数即可,

package:格式为:prepay_id=wx21201855730335ac86f8c43d1889123400

appid:与商户绑定的公众ID(企业级可以进行支付的公众号)

privateKey:商户私钥,在商户里申请获得,具体可参考→ 微信商户获取私钥

public String getSign(long timestamp, String nonceStr, String pack) throws Exception {

           String message = this.appid + "\n" + timestamp + "\n" + nonceStr + "\n" + pack + "\n";

           return sign(message.getBytes("utf-8"));

}

private String sign(byte[] message) throws Exception {

        Signature sign = Signature.getInstance("SHA256withRSA");

        // 这里需要一个PrivateKey类型的参数,就是商户的私钥。

        // 获取商户私钥

        // 加载商户私钥(privateKey:私钥字符串)

        PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(new ByteArrayInputStream(linprivatekey.getBytes("utf-8")));

        // PrivateKey privateKey = wxPayConfig.getPrivateKey(wxPayConfig.getPrivateKeyPath());

        sign.initSign(merchantPrivateKey);

        sign.update(message);

        return Base64.getEncoder().encodeToString(sign.sign());

}