微信支付—1.总结可用信息—java前后操作支付

注释:1、2为准备工作

1.微信支付规则

用于支付协议规则

2.参数规定

这里写图片描述

3.调用接口

        第一步需要先生成一个签名:

这里写图片描述

        第二步在微信端进行调用wx.requestPayment(OBJECT)发起微信支付

这里写图片描述


现在进行梳理支付,首先暴露一个流程,大家经过研读也应该有看到,这里将对于没有看过开发文档的看客观看:

**

  • 1.需要先微信小程序端使用调用登录方法,获取一个code

**

App({
  onLaunch: function() {
    wx.login({
      success: function(res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('获取用户登录态失败!' + res.errMsg)
        }
      }
    });
  }
})

  • 2.后端需要相应的调用登录api根据code进行获取一个openid,这个是需要之后在支付中使用
    public static JSONObject getSessionKeyOropenid(ReceivePayInfoUtil receivePayInfoUtil,String code) {
        //微信端登录code值获取oppenid
        String requestUrl = receivePayInfoUtil.url;
        Map<String, String> requestUrlParam = new LinkedHashMap<String, String>();
        requestUrlParam.put("appid", receivePayInfoUtil.getAppid());
        requestUrlParam.put("secret", receivePayInfoUtil.getSecret());
        requestUrlParam.put("js_code", code);
        requestUrlParam.put("grant_type", "authorization_code");

//发送post请求读取调用微信 https://api.weixin.qq.com/sns/jscode2session 接口获取openid用户唯一标识
        JSONObject jsonObject = JSON.parseObject(HttpSendUtil.sendPostOpen(requestUrl, requestUrlParam));

        return jsonObject;
    }
    注:最后的JSONObject方法体重是自定义的http请求,自己封装即可

  • 3.根据获取的openid先进行生成一个签名(个人经验–这个签名与之后你发起请求的吧包体字段除去*户key,其他字段一致)
    例如:sign=a+b+c+商户key;;;;发送的包体中需要a+b+c+sign(生成的签名)
        //证书签名

        String A = "appid=" + appid +"&attach="+attach
                + "&body="+body+"&mch_id=" + mch_id + "&nonce_str=" + nonce_str+"&notify_url="+notify_url
                +"&openid="+openid+"&out_trade_no="+out_trade_no
                +"&total_fee="+total_fee
                +"&trade_type="+trade_type;
        String SignTemp = A + "&key=" + receivePayInfoUtil.getKey();
        String signmd5 = PayServiceUtil.getStrMd5(SignTemp).toUpperCase();

      //根据升序转化成XML
        Map<String, Object> parameters = new LinkedHashMap<String, Object>();
        parameters.put("appid", appid);
        parameters.put("attach", attach);
        parameters.put("body", body);
        parameters.put("mch_id", mch_id);
        parameters.put("nonce_str", nonce_str);
        parameters.put("notify_url", notify_url);
        parameters.put("openid", openid);
        parameters.put("out_trade_no", out_trade_no);
        parameters.put("total_fee", total_fee);
        parameters.put("trade_type", trade_type);
        parameters.put("sign", signmd5);
        String requestXML = XML.getMap2Xml(parameters);
        String a = HttpSendUtil.sendPost(payUrl, requestXML);
        JSONObject jsonObject1 = XML.toJSONObject(a);
        jsonObject1.put("key",receivePayInfoUtil.getKey());
注:此demo全部为自己封装使用,没有使用太多jar包,相信大家可以看懂,不懂可以直接博客评论私信都可以

  • 4.生成签名方式在开发文档中有,拼接,进行md5,然后生成的md5.toUpperCase();
此处写的不好,上面代码有此内容,如果再次粘贴,可能大家会出现更多疑问点,会再次斟酌重写此篇文章

到此,最后再就是微信端调用此处返回的信息,进行再次签名,根据开发文档的再次签名即可,进行使用微信支付接口即可

wx.requestPayment({
   'timeStamp': '',
   'nonceStr': '',
   'package': '',
   'signType': 'MD5',
   'paySign': '',
   'success':function(res){
   },
   'fail':function(res){
   }
})

微信支付就这样到此为止了,最后告诉大家一个坑,appid,这个id的i为大写,这个问题发生在返回信息的再次签名中(微信的小坑)

猜你喜欢

转载自blog.csdn.net/majipeng19950610/article/details/78338099