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

来源:互联网 发布:微信秒红包软件 编辑:程序博客网 时间:2024/06/03 14:28

注释: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为大写,这个问题发生在返回信息的再次签名中(微信的小坑)

原创粉丝点击