From ed4cb18c00ad67c6f04c86e788fca45809568d26 Mon Sep 17 00:00:00 2001 From: jinyu Date: Thu, 23 Jul 2015 09:51:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98=EF=BC=9A?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=88=E6=9D=83=E7=A0=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?OPENID=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/foxinmy/weixin4j/api/Pay3Api.java | 25 +++++++++++ .../weixin4j/payment/PayURLConsts.java | 8 +++- .../weixin4j/payment/WeixinPayProxy.java | 18 ++++++++ .../payment/mch/AuthCodeOpenIdResult.java | 41 +++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/AuthCodeOpenIdResult.java diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/Pay3Api.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/Pay3Api.java index 7bd9459b..21ce6a23 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/Pay3Api.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/Pay3Api.java @@ -28,6 +28,7 @@ import com.foxinmy.weixin4j.model.WeixinPayAccount; import com.foxinmy.weixin4j.payment.PayURLConsts; import com.foxinmy.weixin4j.payment.PayUtil; import com.foxinmy.weixin4j.payment.mch.ApiResult; +import com.foxinmy.weixin4j.payment.mch.AuthCodeOpenIdResult; import com.foxinmy.weixin4j.payment.mch.Order; import com.foxinmy.weixin4j.payment.mch.RefundRecord; import com.foxinmy.weixin4j.payment.mch.RefundResult; @@ -430,6 +431,30 @@ public class Pay3Api { return response.getAsXmlResult(); } + /** + * 授权码查询OPENID接口 + * + * @param authCode + * 扫码支付授权码,设备读取用户微信中的条码或者二维码信息 + * @return 查询结果 + * @see com.foxinmy.weixin4j.payment.mch.AuthCodeOpenIdResult + * @see 授权码查询OPENID + * @throws WeixinException + */ + public AuthCodeOpenIdResult authCode2openId(String authCode) + throws WeixinException { + Map map = baseMap(null); + map.put("auth_code", authCode); + String sign = PayUtil.paysignMd5(map, weixinAccount.getPaySignKey()); + map.put("sign", sign); + String param = XmlStream.map2xml(map); + WeixinResponse response = weixinClient.post( + PayURLConsts.MCH_AUTHCODE_OPENID_URL, param); + return response.getAsObject(new TypeReference() { + }); + } + /** * V3接口请求基本数据 * diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java index ffdc2817..655f631b 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/PayURLConsts.java @@ -102,9 +102,15 @@ public final class PayURLConsts { * 商户平台下native支付的url-模式1 */ public static final String MCH_NATIVE_URL1 = "weixin://wxpay/bizpayurl?sign=%s&appid=%s&mch_id=%s&product_id=%s&time_stamp=%s&nonce_str=%s"; - + /** * 商户平台下native支付的url-模式2 */ public static final String MCH_NATIVE_URL2 = "weixin://wxpay/bizpayurl?sr=%s"; + + /** + * 授权码查询OPENID接口 + */ + public static final String MCH_AUTHCODE_OPENID_URL = MCH_BASE_URL + + "/tools/authcodetoopenid"; } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java index 77a0231e..37ed0e74 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java @@ -17,6 +17,7 @@ import com.foxinmy.weixin4j.payment.coupon.CouponDetail; import com.foxinmy.weixin4j.payment.coupon.CouponResult; import com.foxinmy.weixin4j.payment.coupon.CouponStock; import com.foxinmy.weixin4j.payment.mch.ApiResult; +import com.foxinmy.weixin4j.payment.mch.AuthCodeOpenIdResult; import com.foxinmy.weixin4j.payment.mch.MPPayment; import com.foxinmy.weixin4j.payment.mch.MPPaymentRecord; import com.foxinmy.weixin4j.payment.mch.MPPaymentResult; @@ -505,4 +506,21 @@ public class WeixinPayProxy { return cashApi.mchPaymentQuery(new FileInputStream(DEFAULT_CA_FILE), outTradeNo); } + + /** + * 授权码查询OPENID接口 + * + * @param authCode + * 扫码支付授权码,设备读取用户微信中的条码或者二维码信息 + * @return 查询结果 + * @see com.foxinmy.weixin4j.api.CashApi + * @see com.foxinmy.weixin4j.payment.mch.AuthCodeOpenIdResult + * @see 授权码查询OPENID + * @throws WeixinException + */ + public AuthCodeOpenIdResult authCode2openId(String authCode) + throws WeixinException { + return pay3Api.authCode2openId(authCode); + } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/AuthCodeOpenIdResult.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/AuthCodeOpenIdResult.java new file mode 100644 index 00000000..7372dcce --- /dev/null +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/mch/AuthCodeOpenIdResult.java @@ -0,0 +1,41 @@ +package com.foxinmy.weixin4j.payment.mch; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +import com.alibaba.fastjson.annotation.JSONField; + +/** + * authcode2openid + * + * @className AuthCodeOpenIdResult + * @author jy + * @date 2015年7月23日 + * @since JDK 1.7 + * @see + */ +@XmlRootElement +@XmlAccessorType(XmlAccessType.FIELD) +public class AuthCodeOpenIdResult extends ApiResult { + + private static final long serialVersionUID = 902743989722741814L; + + /** + * 用户在商户appid下的唯一标识 + */ + @XmlElement(name = "openid") + @JSONField(name = "openid") + private String openId; + + public String getOpenId() { + return openId; + } + + @Override + public String toString() { + return "AuthCodeOpenIdResult [openId=" + openId + ", " + + super.toString() + "]"; + } +}