微信支付功能(儘量簡化,儘量少用工具包)


    @Value("${spring.weChat.mchAppid}")
    private String mchAppid;

    @Value("${spring.weChat.mchid}")
    private String mchid;

    @Value("${spring.weChat.key}")
    private String key;

    @Autowired
    private HttpServletRequest req;

@Override
@Transactional
public Map wechatPay(String amount, String openid, String name) throws Exception {
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    //讀取本機存放的PKCS12證書文件
    keyStore.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("apiclient_cert.p12"), mchAppid.toCharArray());
    SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchAppid.toCharArray()).build();
    //指定TLS版本
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
            sslcontext, new String[]{"TLSv1"}, null,
            SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
    //設置httpclient的SSLSocketFactory
    CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLSocketFactory(sslsf)
            .build();
    Map<Object, Object> map = new HashMap<>();
    /**
     * 這裏我是原來微信三方登錄時獲取openId存入數據庫的,所有可以直接讀出來
     *     根據你的業務邏輯來獲取openId
     */
    Map<String, String> restmap = null;
    //1.數據
    Map<String, String> parm = new HashMap<>();
    parm.put("mch_appid", mchAppid); // 公衆賬號appid
    parm.put("mchid", mchid); // 商戶號
    parm.put("nonce_str", WXPayUtil.generateNonceStr()); // 隨機字符串
    parm.put("partner_trade_no", new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + RandomStringUtils.randomNumeric(3)); // 生成商戶訂單號
    parm.put("openid", openid); // 用戶openid
    parm.put("check_name", "NO_CHECK"); // 是否驗證真實姓名--校驗用戶姓名選項 OPTION_CHECK
    parm.put("re_user_name", ""); //收款用戶姓名---check_name設置爲FORCE_CHECK或OPTION_CHECK,則必填
    parm.put("amount", amount); // 轉賬金額
    parm.put("desc", "企業名稱" + name); // 企業付款描述信息
    parm.put("spbill_create_ip", IpUtils.getIpAddr(req)); // Ip地址
    parm.put("sign", WXPayUtil.generateSignature(parm, key));
    String str = WXPayUtil.mapToXml(parm);
    //2.發送請求
    HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
    httpPost.setEntity(new StringEntity(str, Consts.UTF_8));
    CloseableHttpResponse execute = httpclient.execute(httpPost);
    //3.獲取結果
    String xmltring = EntityUtils.toString(execute.getEntity(), Consts.UTF_8);
    restmap = WXPayUtil.xmlToMap(xmltring);
    if (CollectionUtil.isNotEmpty(restmap) && "SUCCESS".equals(restmap.get("result_code"))) {
        Map<String, String> transferMap = new HashMap<>();
        transferMap.put("partner_trade_no", restmap.get("partner_trade_no"));// 商戶轉賬訂單號
        transferMap.put("payment_no", restmap.get("payment_no")); // 微信訂單號
        transferMap.put("payment_time", restmap.get("payment_time")); // 微信支付成功時間


    } else {
        if (CollectionUtil.isNotEmpty(restmap)) {
        }
    }
    map.put("code", 200);
    map.put("msg", "提現成功!");
    return map;
}

WXPayUtil的maven座標是

   <!--微信支付工具包-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>

在這裏插入圖片描述
這個文件也不能忘了,放在resource下或者其他文件夾裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章