1. 程式人生 > 其它 >Java微信支付介面使用方法詳解(上)

Java微信支付介面使用方法詳解(上)

技術標籤:技能使用程式碼相關知識java介面

前言

距離上次發文章已經過去好久了,主要這段時間內寫的東西有點簡單,基本都見過了,都是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引入,但是需要簽名加密。

結語:

有些坑不得不踩,有些事不得不做,希望能通過分享互相進步,走過這段平凡的路。