基於微信支付可能對於初入者來說是一個有點煩的東西 可能對於不同的場景應用有點繁瑣 下面的分享一個簡易的集成支付代碼 各位可看 勿噴
/**
* 因爲微信總是很多個商戶號很多和appid。很多個密鑰文件,所以全部改成手動傳值的方式,就可以支持多商戶調用
*
* @param appId 商戶的appid
* @param mchId 商戶的商戶號
* @param key 商戶的支付用的密鑰
* @param certPath 商戶的退款用的退款文件地址,非必傳,沒有就傳null,具體看開發文檔是否需退款文件
* @throws Exception
*/
調用示例測試代碼。掃碼支付返回的是一個base64格式的二維碼。需要拼接前綴的(有逗號) : data:image/jpeg;base64,
public static void main(String[] args) throws Exception {
WXPayEntrance wxPayEntrance = new WXPayEntrance("wxab8acb865bb1637e", "11473623", "2ab9071b06b9f739b950ddb41db2690d", null);
WXPayVO wxPayVO = new WXPayVO();
wxPayVO.setBody("1231231666623");
wxPayVO.setTotalFee("1");
wxPayVO.setNotifyUrl("https://********/api/wxpayreturn");
wxPayVO.setTradeType("NATIVE");
wxPayVO.setOutTradeNo("ty190523151415047046");
wxPayVO.setUid(123123123);
wxPayVO.setSpbillCreateIp("192.168.17.214");
Map<String, String> map = wxPayEntrance.doUnifiedOrder(wxPayVO);
System.out.println(map);
// PayRefundVo payRefundVo = new PayRefundVo();
// payRefundVo.setOutRefundNo("A190523155119103");
// payRefundVo.setOutTradeNo("ty190523155047046");
// payRefundVo.setRefundDesc("退款");
// payRefundVo.setRefundFee("10");
// payRefundVo.setUid(123123123);
// payRefundVo.setRefundFeeType("CNY");
// payRefundVo.setTotalFee("120");
// Map<String, String> map = wxPayEntrance.doRefund(payRefundVo);
// System.out.println(map);
}
異步回調代碼如下:
package com.huis.portal.controller;
import com.huis.portal.weixinpay.WXPayUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
@RestController
@Api(description = "支付模塊模塊")
@CrossOrigin(origins = "*", maxAge = 3600)
@Transactional(rollbackFor = Exception.class)
public class PayRestController {
@ApiOperation(value = "微信回調接口", notes = "微信回調接口")
@RequestMapping(value = "/api/wxpayreturn", method = RequestMethod.POST)
public String WeixinParentNotifyPage(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 返回給微信的處理結果
String result = null;
String inputLine;
String notityXml = "";
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.setHeader("Access-Control-Allow-Origin", "*");
// 微信給返回的東西
try {
while ((inputLine = request.getReader().readLine()) != null) {
notityXml += inputLine;
}
request.getReader().close();
} catch (Exception e) {
e.printStackTrace();
result = setXml("fail", "xml獲取失敗");
return result;
}
if (StringUtils.isEmpty(notityXml)) {
result = setXml("fail", "xml爲空");
return result;
}
Map<String, String> map = WXPayUtil.xmlToMap(notityXml);
String out_trade_no = (String) map.get("out_trade_no");// 獲取商戶訂單號
String result_code = (String) map.get("result_code");// 業務結果
String total_fee = (String) map.get("total_fee");// 獲取訂單金額
String appid = (String) map.get("appid");// 獲取訂單金額
if (map.get("result_code").equals("SUCCESS")) {
//TODO
result = setXml("SUCCESS", "OK");
return result;
}else {
result = setXml("fail", "xml爲空");
return result;
}
}
// 通過xml 發給微信消息
public static String setXml(String return_code, String return_msg) {
SortedMap<String, String> parameters = new TreeMap<String, String>();
parameters.put("return_code", return_code);
parameters.put("return_msg", return_msg);
return "<xml><return_code><![CDATA[" + return_code + "]]>" + "</return_code><return_msg><![CDATA[" + return_msg
+ "]]></return_msg></xml>";
}
}
微信支付代碼下載地址:鏈接:https://pan.baidu.com/s/1kZs5hxQuzxmRR50N-DOKSg 密碼:u4rj