@@ -6,11 +6,10 @@ import java.io.Serializable; | |||||
* jspai signature | * jspai signature | ||||
*/ | */ | ||||
public class WxJsapiSignature implements Serializable { | public class WxJsapiSignature implements Serializable { | ||||
private String appid; | |||||
private String noncestr; | private String noncestr; | ||||
private String jsapiTicket; | |||||
private long timestamp; | private long timestamp; | ||||
private String url; | private String url; | ||||
@@ -33,14 +32,6 @@ public class WxJsapiSignature implements Serializable { | |||||
this.noncestr = noncestr; | this.noncestr = noncestr; | ||||
} | } | ||||
public String getJsapiTicket() { | |||||
return jsapiTicket; | |||||
} | |||||
public void setJsapiTicket(String jsapiTicket) { | |||||
this.jsapiTicket = jsapiTicket; | |||||
} | |||||
public long getTimestamp() { | public long getTimestamp() { | ||||
return timestamp; | return timestamp; | ||||
} | } | ||||
@@ -57,4 +48,12 @@ public class WxJsapiSignature implements Serializable { | |||||
this.url = url; | 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); | 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 openId 支付人openId | ||||
* @param outTradeNo 商户端对应订单号 | * @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); | 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 | "url=" + url | ||||
); | ); | ||||
WxJsapiSignature jsapiSignature = new WxJsapiSignature(); | WxJsapiSignature jsapiSignature = new WxJsapiSignature(); | ||||
jsapiSignature.setAppid(wxMpConfigStorage.getAppId()); | |||||
jsapiSignature.setTimestamp(timestamp); | jsapiSignature.setTimestamp(timestamp); | ||||
jsapiSignature.setNoncestr(noncestr); | jsapiSignature.setNoncestr(noncestr); | ||||
jsapiSignature.setUrl(url); | jsapiSignature.setUrl(url); | ||||
@@ -792,4 +793,61 @@ public class WxMpServiceImpl implements WxMpService { | |||||
payInfo.put("sign", finalSign); | payInfo.put("sign", finalSign); | ||||
return payInfo; | 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> | * <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> | * </pre> | ||||
* | * | ||||