Java微信支付介面使用方法詳解(上)
阿新 • • 發佈:2020-12-22
前言
距離上次發文章已經過去好久了,主要這段時間內寫的東西有點簡單,基本都見過了,都是crud,現在將最近寫過的微信支付,附上一份供大家參考。互相學習,互相進步。
微信支付介面使用流程:
1. 先上官方文件
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
2. 下載官方sdk(附地址)
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1
3. 將sdk加入專案工程內,如圖:
ps:最好獨立建一個wx包放sdk
4. 自己配置一下,使其適用於自己(附程式碼)
該類用於微信介面必用的引數配置
import java.io.ByteArrayInputStream;
import java.io.InputStream;
/**
* @Description: 微信支付配置類
* @author Rui3g
* @date 2020/12/14 14:08
* @Version: 1.0
*/
public class MyConfig extends WXPayConfig {
private byte[] certData;
public MyConfig() throws Exception {
}
private String appId;
private String mchId;
private String keys;
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getMchId() {
return mchId;
}
public void setMchId(String mchId) {
this.mchId = mchId;
}
public void setKeys(String keys) {
this.keys = keys;
}
public String getKeys() {
return keys;
}
@Override
public String getAppID() {
return appId;
}
@Override
public String getMchID() {
return mchId;
}
@Override
public String getKey() {
return keys;
}
@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);
}
};
}
}
5. 配置必用工具類
將在使用許多微信介面時,經常用到的封裝成方法。減少程式碼
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
/**
* @author Rui3g
* @date 2020/12/18 17:13
*/
public class WxUtils {
/**
* 微信通用返回
* @param wxpay
* @param data
* @param stringStringMap
* @param key
* @return
* @throws Exception
* 該方法可以進行修改,使之成為自己所需的引數
*/
public static Map<String, String> getStringStringMap(WXPay wxpay, HashMap<String, String> data, Map<String, String> stringStringMap,String key) throws Exception {
String sign = WXPayUtil.generateSignature(data,key);
data.put("sign",sign);
assert wxpay != null;
Map<String, String> rMap = stringStringMap;
System.out.println("統一下單介面返回: " + rMap);
String returnCode = (String) rMap.get("return_code");
String resultCode = (String) rMap.get("result_code");
return rMap;
}
/**
* 配置微信方法
* 配置必要引數
* @return
*/
public static WXPay getWxPay(String appId,String mchId,String key){
MyConfig config = null;
WXPay wxpay = null;
try {
config = new MyConfig();
config.setAppId(appId);
config.setMchId(mchId);
config.setKeys(key);
wxpay = new WXPay(config);
} catch (Exception e) {
e.printStackTrace();
}
return wxpay;
}
/**
* 獲取本機地址
* 獲取本機的ip地址
* @return
*/
public static String getAddress(){
//獲取客戶端的ip地址
//獲取本機的ip地址
InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
assert addr != null;
return addr.getHostAddress();
}
}
準備工作已經完成,下面可以進行使用了。
(具體操作請見《Java微信支付介面使用方法詳解(下)》)。
ps: 本次使用的微信支付介面v2版,v3版不需要進行sdk引入,但是需要簽名加密。
結語:
有些坑不得不踩,有些事不得不做,希望能通過分享互相進步,走過這段平凡的路。