@@ -6,11 +6,10 @@ import java.io.Serializable; | |||
* jspai signature | |||
*/ | |||
public class WxJsapiSignature implements Serializable { | |||
private String appid; | |||
private String noncestr; | |||
private String jsapiTicket; | |||
private long timestamp; | |||
private String url; | |||
@@ -33,14 +32,6 @@ public class WxJsapiSignature implements Serializable { | |||
this.noncestr = noncestr; | |||
} | |||
public String getJsapiTicket() { | |||
return jsapiTicket; | |||
} | |||
public void setJsapiTicket(String jsapiTicket) { | |||
this.jsapiTicket = jsapiTicket; | |||
} | |||
public long getTimestamp() { | |||
return timestamp; | |||
} | |||
@@ -57,4 +48,12 @@ public class WxJsapiSignature implements Serializable { | |||
this.url = url; | |||
} | |||
public String getAppid() { | |||
return appid; | |||
} | |||
public void setAppid(String appid) { | |||
this.appid = appid; | |||
} | |||
} |
@@ -543,7 +543,7 @@ public interface WxMpService { | |||
void setMaxRetryTimes(int maxRetryTimes); | |||
/** | |||
* 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1) | |||
* 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1) | |||
* 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识" | |||
* @param openId 支付人openId | |||
* @param outTradeNo 商户端对应订单号 | |||
@@ -570,4 +570,19 @@ public interface WxMpService { | |||
*/ | |||
Map<String, String> getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl); | |||
/** | |||
* 该接口提供所有微信支付订单的查询,当支付通知处理异常戒丢失的情冴,商户可以通过该接口查询订单支付状态。 | |||
* 详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2 | |||
* @param transactionId | |||
* @param outTradeNo | |||
*/ | |||
WxMpPayResult getJSSDKPayResult(String transactionId, String outTradeNo); | |||
/** | |||
* 读取支付结果通知 | |||
* 详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7 | |||
* @param xmlData | |||
* @return | |||
*/ | |||
WxMpPayCallback getJSSDKCallbackData(String xmlData); | |||
} |
@@ -162,6 +162,7 @@ public class WxMpServiceImpl implements WxMpService { | |||
"url=" + url | |||
); | |||
WxJsapiSignature jsapiSignature = new WxJsapiSignature(); | |||
jsapiSignature.setAppid(wxMpConfigStorage.getAppId()); | |||
jsapiSignature.setTimestamp(timestamp); | |||
jsapiSignature.setNoncestr(noncestr); | |||
jsapiSignature.setUrl(url); | |||
@@ -792,4 +793,61 @@ public class WxMpServiceImpl implements WxMpService { | |||
payInfo.put("sign", finalSign); | |||
return payInfo; | |||
} | |||
@Override | |||
public WxMpPayResult getJSSDKPayResult(String transactionId, String outTradeNo) { | |||
String nonce_str = System.currentTimeMillis() + ""; | |||
SortedMap<String, String> packageParams = new TreeMap<String, String>(); | |||
packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||
packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||
packageParams.put("transaction_id", transactionId); | |||
packageParams.put("out_trade_no", outTradeNo); | |||
packageParams.put("nonce_str", nonce_str); | |||
String sign = WxCryptUtil.createSign(packageParams, wxMpConfigStorage.getPartnerKey()); | |||
String xml = "<xml>" + | |||
"<appid>" + wxMpConfigStorage.getAppId() + "</appid>" + | |||
"<mch_id>" + wxMpConfigStorage.getPartnerId() + "</mch_id>" + | |||
"<transaction_id>" + transactionId + "</transaction_id>" + | |||
"<out_trade_no>" + outTradeNo + "</out_trade_no>" + | |||
"<nonce_str>" + nonce_str + "</nonce_str>" + | |||
"<sign>" + sign + "</sign>" + | |||
"</xml>"; | |||
HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/orderquery"); | |||
if (httpProxy != null) { | |||
RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||
httpPost.setConfig(config); | |||
} | |||
StringEntity entity = new StringEntity(xml, Consts.UTF_8); | |||
httpPost.setEntity(entity); | |||
try { | |||
CloseableHttpResponse response = httpClient.execute(httpPost); | |||
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | |||
XStream xstream = XStreamInitializer.getInstance(); | |||
xstream.alias("xml", WxMpPayResult.class); | |||
WxMpPayResult wxMpPayResult = (WxMpPayResult) xstream.fromXML(responseContent); | |||
return wxMpPayResult; | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
} | |||
return new WxMpPayResult(); | |||
} | |||
@Override | |||
public WxMpPayCallback getJSSDKCallbackData(String xmlData) { | |||
try { | |||
XStream xstream = XStreamInitializer.getInstance(); | |||
xstream.alias("xml", WxMpPayResult.class); | |||
WxMpPayCallback wxMpCallback = (WxMpPayCallback) xstream.fromXML(xmlData); | |||
return wxMpCallback; | |||
} catch (Exception e){ | |||
e.printStackTrace(); | |||
} | |||
return new WxMpPayCallback(); | |||
} | |||
} |
@@ -0,0 +1,260 @@ | |||
package me.chanjar.weixin.mp.bean.result; | |||
import java.io.Serializable; | |||
/** | |||
* pre> 订单支付状态回调 | |||
* | |||
* 支付结果通知(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_7) | |||
* | |||
* /pre> | |||
* | |||
* @author ukid | |||
*/ | |||
public class WxMpPayCallback implements Serializable { | |||
private String return_code; | |||
private String return_msg; | |||
private String appid; | |||
private String mch_id; | |||
private String device_info; | |||
private String nonce_str; | |||
private String sign; | |||
private String result_code; | |||
private String err_code; | |||
private String err_code_des; | |||
private String openid; | |||
private String is_subscribe; | |||
private String trade_type; | |||
private String bank_type; | |||
private String total_fee; | |||
private String fee_type; | |||
private String cash_fee; | |||
private String cash_fee_type; | |||
private String coupon_fee; | |||
private String coupon_count; | |||
private String coupon_batch_id_$n; | |||
private String coupon_id_$n; | |||
private String coupon_fee_$n; | |||
private String transaction_id; | |||
private String out_trade_no; | |||
private String attach; | |||
private String time_end; | |||
public String getReturn_code() { | |||
return return_code; | |||
} | |||
public String getReturn_msg() { | |||
return return_msg; | |||
} | |||
public String getAppid() { | |||
return appid; | |||
} | |||
public String getMch_id() { | |||
return mch_id; | |||
} | |||
public String getDevice_info() { | |||
return device_info; | |||
} | |||
public String getNonce_str() { | |||
return nonce_str; | |||
} | |||
public String getSign() { | |||
return sign; | |||
} | |||
public String getResult_code() { | |||
return result_code; | |||
} | |||
public String getErr_code() { | |||
return err_code; | |||
} | |||
public String getErr_code_des() { | |||
return err_code_des; | |||
} | |||
public String getOpenid() { | |||
return openid; | |||
} | |||
public String getIs_subscribe() { | |||
return is_subscribe; | |||
} | |||
public String getTrade_type() { | |||
return trade_type; | |||
} | |||
public String getBank_type() { | |||
return bank_type; | |||
} | |||
public String getTotal_fee() { | |||
return total_fee; | |||
} | |||
public String getFee_type() { | |||
return fee_type; | |||
} | |||
public String getCash_fee() { | |||
return cash_fee; | |||
} | |||
public String getCash_fee_type() { | |||
return cash_fee_type; | |||
} | |||
public String getCoupon_fee() { | |||
return coupon_fee; | |||
} | |||
public String getCoupon_count() { | |||
return coupon_count; | |||
} | |||
public String getCoupon_batch_id_$n() { | |||
return coupon_batch_id_$n; | |||
} | |||
public String getCoupon_id_$n() { | |||
return coupon_id_$n; | |||
} | |||
public String getCoupon_fee_$n() { | |||
return coupon_fee_$n; | |||
} | |||
public String getTransaction_id() { | |||
return transaction_id; | |||
} | |||
public String getOut_trade_no() { | |||
return out_trade_no; | |||
} | |||
public String getAttach() { | |||
return attach; | |||
} | |||
public String getTime_end() { | |||
return time_end; | |||
} | |||
public void setReturn_code(String return_code) { | |||
this.return_code = return_code; | |||
} | |||
public void setReturn_msg(String return_msg) { | |||
this.return_msg = return_msg; | |||
} | |||
public void setAppid(String appid) { | |||
this.appid = appid; | |||
} | |||
public void setMch_id(String mch_id) { | |||
this.mch_id = mch_id; | |||
} | |||
public void setDevice_info(String device_info) { | |||
this.device_info = device_info; | |||
} | |||
public void setNonce_str(String nonce_str) { | |||
this.nonce_str = nonce_str; | |||
} | |||
public void setSign(String sign) { | |||
this.sign = sign; | |||
} | |||
public void setResult_code(String result_code) { | |||
this.result_code = result_code; | |||
} | |||
public void setErr_code(String err_code) { | |||
this.err_code = err_code; | |||
} | |||
public void setErr_code_des(String err_code_des) { | |||
this.err_code_des = err_code_des; | |||
} | |||
public void setOpenid(String openid) { | |||
this.openid = openid; | |||
} | |||
public void setIs_subscribe(String is_subscribe) { | |||
this.is_subscribe = is_subscribe; | |||
} | |||
public void setTrade_type(String trade_type) { | |||
this.trade_type = trade_type; | |||
} | |||
public void setBank_type(String bank_type) { | |||
this.bank_type = bank_type; | |||
} | |||
public void setTotal_fee(String total_fee) { | |||
this.total_fee = total_fee; | |||
} | |||
public void setFee_type(String fee_type) { | |||
this.fee_type = fee_type; | |||
} | |||
public void setCash_fee(String cash_fee) { | |||
this.cash_fee = cash_fee; | |||
} | |||
public void setCash_fee_type(String cash_fee_type) { | |||
this.cash_fee_type = cash_fee_type; | |||
} | |||
public void setCoupon_fee(String coupon_fee) { | |||
this.coupon_fee = coupon_fee; | |||
} | |||
public void setCoupon_count(String coupon_count) { | |||
this.coupon_count = coupon_count; | |||
} | |||
public void setCoupon_batch_id_$n(String coupon_batch_id_$n) { | |||
this.coupon_batch_id_$n = coupon_batch_id_$n; | |||
} | |||
public void setCoupon_id_$n(String coupon_id_$n) { | |||
this.coupon_id_$n = coupon_id_$n; | |||
} | |||
public void setCoupon_fee_$n(String coupon_fee_$n) { | |||
this.coupon_fee_$n = coupon_fee_$n; | |||
} | |||
public void setTransaction_id(String transaction_id) { | |||
this.transaction_id = transaction_id; | |||
} | |||
public void setOut_trade_no(String out_trade_no) { | |||
this.out_trade_no = out_trade_no; | |||
} | |||
public void setAttach(String attach) { | |||
this.attach = attach; | |||
} | |||
public void setTime_end(String time_end) { | |||
this.time_end = time_end; | |||
} | |||
} |
@@ -0,0 +1,215 @@ | |||
package me.chanjar.weixin.mp.bean.result; | |||
import java.io.Serializable; | |||
/** | |||
* <pre> | |||
* 查询订单支付状态返回的结果 | |||
* | |||
* 查询订单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2) | |||
* | |||
* </pre> | |||
* | |||
* @author ukid | |||
*/ | |||
public class WxMpPayResult implements Serializable { | |||
private String return_code; | |||
private String return_msg; | |||
private String appid; | |||
private String mch_id; | |||
private String nonce_str; | |||
private String sign; | |||
private String result_code; | |||
private String err_code; | |||
private String err_code_des; | |||
private String trade_state; | |||
private String device_info; | |||
private String openid; | |||
private String is_subscribe; | |||
private String trade_type; | |||
private String bank_type; | |||
private String total_fee; | |||
private String coupon_fee; | |||
private String fee_type; | |||
private String transaction_id; | |||
private String out_trade_no; | |||
private String attach; | |||
private String time_end; | |||
public String getReturn_code() { | |||
return return_code; | |||
} | |||
public String getReturn_msg() { | |||
return return_msg; | |||
} | |||
public String getAppid() { | |||
return appid; | |||
} | |||
public String getMch_id() { | |||
return mch_id; | |||
} | |||
public String getNonce_str() { | |||
return nonce_str; | |||
} | |||
public String getSign() { | |||
return sign; | |||
} | |||
public String getResult_code() { | |||
return result_code; | |||
} | |||
public String getErr_code() { | |||
return err_code; | |||
} | |||
public String getErr_code_des() { | |||
return err_code_des; | |||
} | |||
public String getTrade_state() { | |||
return trade_state; | |||
} | |||
public String getDevice_info() { | |||
return device_info; | |||
} | |||
public String getOpenid() { | |||
return openid; | |||
} | |||
public String getIs_subscribe() { | |||
return is_subscribe; | |||
} | |||
public String getTrade_type() { | |||
return trade_type; | |||
} | |||
public String getBank_type() { | |||
return bank_type; | |||
} | |||
public String getTotal_fee() { | |||
return total_fee; | |||
} | |||
public String getCoupon_fee() { | |||
return coupon_fee; | |||
} | |||
public String getFee_type() { | |||
return fee_type; | |||
} | |||
public String getTransaction_id() { | |||
return transaction_id; | |||
} | |||
public String getOut_trade_no() { | |||
return out_trade_no; | |||
} | |||
public String getAttach() { | |||
return attach; | |||
} | |||
public String getTime_end() { | |||
return time_end; | |||
} | |||
public void setReturn_code(String return_code) { | |||
this.return_code = return_code; | |||
} | |||
public void setReturn_msg(String return_msg) { | |||
this.return_msg = return_msg; | |||
} | |||
public void setAppid(String appid) { | |||
this.appid = appid; | |||
} | |||
public void setMch_id(String mch_id) { | |||
this.mch_id = mch_id; | |||
} | |||
public void setNonce_str(String nonce_str) { | |||
this.nonce_str = nonce_str; | |||
} | |||
public void setSign(String sign) { | |||
this.sign = sign; | |||
} | |||
public void setResult_code(String result_code) { | |||
this.result_code = result_code; | |||
} | |||
public void setErr_code(String err_code) { | |||
this.err_code = err_code; | |||
} | |||
public void setErr_code_des(String err_code_des) { | |||
this.err_code_des = err_code_des; | |||
} | |||
public void setTrade_state(String trade_state) { | |||
this.trade_state = trade_state; | |||
} | |||
public void setDevice_info(String device_info) { | |||
this.device_info = device_info; | |||
} | |||
public void setOpenid(String openid) { | |||
this.openid = openid; | |||
} | |||
public void setIs_subscribe(String is_subscribe) { | |||
this.is_subscribe = is_subscribe; | |||
} | |||
public void setTrade_type(String trade_type) { | |||
this.trade_type = trade_type; | |||
} | |||
public void setBank_type(String bank_type) { | |||
this.bank_type = bank_type; | |||
} | |||
public void setTotal_fee(String total_fee) { | |||
this.total_fee = total_fee; | |||
} | |||
public void setCoupon_fee(String coupon_fee) { | |||
this.coupon_fee = coupon_fee; | |||
} | |||
public void setFee_type(String fee_type) { | |||
this.fee_type = fee_type; | |||
} | |||
public void setTransaction_id(String transaction_id) { | |||
this.transaction_id = transaction_id; | |||
} | |||
public void setOut_trade_no(String out_trade_no) { | |||
this.out_trade_no = out_trade_no; | |||
} | |||
public void setAttach(String attach) { | |||
this.attach = attach; | |||
} | |||
public void setTime_end(String time_end) { | |||
this.time_end = time_end; | |||
} | |||
} |
@@ -4,10 +4,9 @@ import java.io.Serializable; | |||
/** | |||
* <pre> | |||
* 群发消息一发送就返回的结果 | |||
* 在发起微信支付前,需要调用统一下单接口,获取"预支付交易会话标识"返回的结果 | |||
* | |||
* 真正的群发消息是否发送成功要看 | |||
* http://mp.weixin.qq.com/wiki/index.php?title=高级群发接口#.E4.BA.8B.E4.BB.B6.E6.8E.A8.E9.80.81.E7.BE.A4.E5.8F.91.E7.BB.93.E6.9E.9C | |||
* 统一下单(详见http://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1) | |||
* | |||
* </pre> | |||
* | |||