b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

微信小程序+微信支付+ Java后台(springboot)使用微信官方支付S

电脑杂谈  发布时间:2020-04-29 19:24:05  来源:网络整理

java微信支付接口开发_微信支付java开发详细_微信支付java开发详细

时间: 2018-12-20

本文向您介绍使用WeChat官方付款SDK(带有代码)的WeChat Mini Program + WeChat Pay + java后端(springboot),主要包括使用WeChat官方付款SDK的WeChat Mini Program + WeChat Pay + java后端(springboot) (带有代码)使用示例微信支付java开发详细,应用技巧,基本知识要点和注意事项的摘要. 具有一定的参考价值. 需要它的朋友可以参考它.

我刚开始做它,我在网上找到了很多东西,下载了三个演示微信支付java开发详细,最后发现这些东西仍然需要干货!

微信支付java开发详细_微信支付java开发详细_java微信支付接口开发

重点:

1. 下载官方微信SDK

选择下载Java版本的最佳做法.

java微信支付接口开发_微信支付java开发详细_微信支付java开发详细

2. 将以下文件复制到您的项目中

3. 在同一文件夹中创建该继承的类

java微信支付接口开发_微信支付java开发详细_微信支付java开发详细

package com.***.utils.wx;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
 * @Description: 微信支付配置类
 * @Author: hm
 * @CreateDate: 2018/12/10 17:19.
 * @UpdateDate: 2018/12/10 17:19.
 * @Version: 1.0
 */
public class MyConfig extends WXPayConfig {
    private byte[] certData;
    public MyConfig() throws Exception {
//        String certPath = "classpath:apiclient_cert.p12";
//        File file = new File(certPath);
//        InputStream certStream = new FileInputStream(file);
//        this.certData = new byte[(int) file.length()];
//        certStream.read(this.certData);
//        certStream.close();
    }
    @Override
    public String getAppID() {
        return "你的appid";
    }
    @Override
    public String getMchID() {
        return "你的商户id";
    }
    @Override
    public String getKey() {
        return "你的商户api安全key,在商户平台api安全目录下可设置";
    }
    @Override
    public InputStream getCertStream() {
        ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);
        return certBis;
    }
    @Override
    public int getHttpConnectTimeoutMs() {
        return 8000;
    }
    @Override
    public int getHttpReadTimeoutMs() {
        return 10000;
    }
    @Override
    IWXPayDomain getWXPayDomain() {
        return new IWXPayDomain() {
            @Override
            public void report(String domain, long elapsedTimeMillis, Exception ex) {
            }
            @Override
            public DomainInfo getDomain(WXPayConfig config) {
                return new DomainInfo("api.mch.weixin.qq.com", false);
            }
        };
    }
}

4. java后台调用统一命令接口类

/**
     * 微信统一下单接口
     * @return
     */
    @RequestMapping(value = "/doUnifiedOrder", method = RequestMethod.POST)
    public BaseResponse<Map> doUnifiedOrder(@RequestBody BaesRequest<LicensePlate> baseRequest) {
        BaseResponse<Map> response = new BaseResponse<>();
        Map resultMap=new HashMap();
        String openid = baseRequest.getRequestData().getOpenId();
        MyConfig config = null;
        WXPay wxpay =null;
        try {
            config = new MyConfig();
            wxpay= new WXPay(config);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //生成的随机字符串
        String nonce_str = WXPayUtil.generateNonceStr();
        //获取客户端的ip地址
        //获取本机的ip地址
        InetAddress addr = null;
        try {
            addr = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        String spbill_create_ip = addr.getHostAddress();
        //支付金额,需要转成字符串类型,否则后面的签名会失败
        int  total_fee=1;
        //商品描述
        String body = "车费支付";
        //商户订单号
        String out_trade_no= WXPayUtil.generateNonceStr();
        //统一下单接口参数
        HashMap<String, String> data = new HashMap<String, String>();
        data.put("appid", appid);
        data.put("mch_id", mch_id);
        data.put("nonce_str", nonce_str);
        data.put("body", body);
        data.put("out_trade_no",out_trade_no);
        data.put("total_fee", String.valueOf(total_fee));
        data.put("spbill_create_ip", spbill_create_ip);
        data.put("notify_url", notify_url);
        data.put("trade_type",TRADETYPE);
        data.put("openid", openid);
        try {
            Map<String, String> rMap = wxpay.unifiedOrder(data);
            System.out.println("统一下单接口返回: " + rMap);
            String return_code = (String) rMap.get("return_code");
            String result_code = (String) rMap.get("result_code");
            String nonceStr = WXPayUtil.generateNonceStr();
            resultMap.put("nonceStr", nonceStr);
            Long timeStamp = System.currentTimeMillis() / 1000;
            if ("SUCCESS".equals(return_code) && return_code.equals(result_code)) {
                String prepayid = rMap.get("prepay_id");
                resultMap.put("package", "prepay_id="+prepayid);
                resultMap.put("signType", "MD5");
                //这边要将返回的时间戳转化成字符串,不然小程序端调用wx.requestPayment方法会报签名错误
                resultMap.put("timeStamp", timeStamp + "");
                //再次签名,这个签名用于小程序端调用wx.requesetPayment方法
                resultMap.put("appId",appid);
                String sign = WXPayUtil.generateSignature(resultMap, key);
                resultMap.put("paySign", sign);
                System.out.println("生成的签名paySign : "+ sign);
                response.setData(resultMap);
                return response;
            }else{
                return  response;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return  response;
        }
    }

微信支付java开发详细_java微信支付接口开发_微信支付java开发详细

5. 小程序的付款请求

payNow: function() {
    var that = this;
    wx.request({
      url: app.data.requestUrl + 'weChatPay/doUnifiedOrder',
      header: {
        "Content-Type": "application/json;charset=UTF-8"
      },
      data: {
        requestData: {
          openId: app.globalData.openId
        }
      },
      method: 'POST',
      dataType: 'json',
      responseType: 'text',
      success: function(res) {
        console.log("服务端返回订单号");
        var c=res.data;
        wx.requestPayment({
          timeStamp: res.data.data.timeStamp,
          nonceStr: res.data.data.nonceStr,
          package: res.data.data.package,
          signType: 'MD5',
          paySign: res.data.data.paySign,
          success(res) {
            console.log("统一下单接口成功");
          },
          fail(res) {
            console.log("统一下单接口失败");
          }
        });
      },
      fail: function(res) {},
      complete: function(res) {},
    });
  }

6. 超级简单的付款过程,只需要修改您自己的appid等配置文件中的信息即可使用. 本文中没有Java背景的业务逻辑,您可以自己添加它,这里主要实现支付功能. (为了保护隐私,主要信息在屏幕截图中被屏蔽. )


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-193325-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...