6.向用户展示支付结果,支付成功后微信异步回调填写的支付通知地址
7.查询订单支付状态
此处调用微信支付查询接口,查询订单支付情况。支付成功需要修改自己本地订单状态,并验证支付金额是否一致。
查询订单关键代码:
package org.oms.app.service;
import java.util.Map;
import java.util.TreeMap;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.jdom2.JDOMException;
import org.oms.app.util.MD5Util;
import org.oms.app.util.XMLUtil;
/**
* 支付成功后订单查询
* @author Sunlight
*
*/
public class WXOrderQuery {
private String partnerKey;
private String appid;
private String mch_id;
private String transaction_id;
private String out_trade_no;
private String nonce_str;
private String sign;
//请求订单查询接口
@SuppressWarnings("unchecked")
public Map<String, String> reqOrderquery(){
// 创建HttpClientBuilder
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// HttpClient
CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/orderquery");
String xml = getPackage();
System.out.println(xml);
StringEntity entity;
Map<String, String> map = null;
try {
entity = new StringEntity(xml, "utf-8");
httpPost.setEntity(entity);
HttpResponse httpResponse;
// post请求
httpResponse = closeableHttpClient.execute(httpPost);
// getEntity()
HttpEntity httpEntity = httpResponse.getEntity();
if (httpEntity != null) {
// 打印响应内容
String result = EntityUtils.toString(httpEntity, "UTF-8");
// 过滤
result = result.replaceAll("<![CDATA[|]]>", "");
try {
map = XMLUtil.doXMLParse(result);
} catch (JDOMException e) {
e.printStackTrace();
}
System.out.println("支付金额:"+map.get("total_fee"));
System.out.println(result);
}
// 释放资源
closeableHttpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
public String getPackage() {
TreeMap<String, String> treeMap = new TreeMap<String, String>();
treeMap.put("appid", this.appid);
treeMap.put("mch_id", this.mch_id);
treeMap.put("transaction_id", this.transaction_id);
treeMap.put("nonce_str", this.nonce_str);
treeMap.put("out_trade_no", this.out_trade_no);
StringBuilder sb = new StringBuilder();
for (String key : treeMap.keySet()) {
sb.append(key).append("=").append(treeMap.get(key)).append("&");
}
sb.append("key=" + partnerKey);
sign = MD5Util.MD5Encode(sb.toString(), "utf-8").toUpperCase();
treeMap.put("sign", sign);
StringBuilder xml = new StringBuilder();
xml.append("<xml>\n");
for (Map.Entry<String, String> entry : treeMap.entrySet()) {
if ("body".equals(entry.getKey()) || "sign".equals(entry.getKey())) {
xml.append("<" + entry.getKey() + "><![CDATA[").append(entry.getValue()).append("]]></" + entry.getKey() + ">\n");
} else {
xml.append("<" + entry.getKey() + ">").append(entry.getValue()).append("</" + entry.getKey() + ">\n");
}
}
xml.append("</xml>");
return xml.toString();
}
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getMch_id() {
return mch_id;
}
public void setMch_id(String mchId) {
mch_id = mchId;
}
public String getTransaction_id() {
return transaction_id;
}
public void setTransaction_id(String transactionId) {
transaction_id = transactionId;
}
public String getOut_trade_no() {
return out_trade_no;
}
public void setOut_trade_no(String outTradeNo) {
out_trade_no = outTradeNo;
}
public String getNonce_str() {
return nonce_str;
}
public void setNonce_str(String nonceStr) {
nonce_str = nonceStr;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getPartnerKey() {
return partnerKey;
}
public void setPartnerKey(String partnerKey) {
this.partnerKey = partnerKey;
}
}
8.返回支付订单信息,向用户展示支付结果
查询订单完成后,先用户展示订单详情页面数据。
9.发送支付模版消息
最后在验证订单无误时,发送微信支付模版信息给微信支付用户。
注意点:需要在微信支付后台配置支付测试参数:
1.测试目录的配置具体查看微信支付开发文档会员详细的说明;
2.配置测试白名单(微信号)