
时间: 2018-12-20
本文向您介绍使用WeChat官方付款SDK(带有代码)的WeChat Mini Program + WeChat Pay + java后端(springboot),主要包括使用WeChat官方付款SDK的WeChat Mini Program + WeChat Pay + java后端(springboot) (带有代码)使用示例微信支付java开发详细,应用技巧,基本知识要点和注意事项的摘要. 具有一定的参考价值. 需要它的朋友可以参考它.
我刚开始做它,我在网上找到了很多东西,下载了三个演示微信支付java开发详细,最后发现这些东西仍然需要干货!

重点:
1. 下载官方微信SDK
选择下载Java版本的最佳做法.

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

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

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;
}
}

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
和平时期