From ae50576bf7de64de9b49954326468740e8ce0680 Mon Sep 17 00:00:00 2001 From: fxdfxq Date: Fri, 25 Mar 2016 18:24:19 +0800 Subject: [PATCH 1/3] Update WxMpService.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加NATIVE扫码支付类型, 1.将原来的getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl)方法拆分为两个方法:1)拼装NATIVE发起支付请求需要的参数的方法 Map getNativePayInfo(String productId, String outTradeNo, double amt, String body, String ip, String notifyUrl); 2) 拼装JSAPI发起支付请求需要的参数方法 Map getJsapiPayInfo(String openId, String outTradeNo, double amt, String body, String ip, String notifyUrl); 2.修改getJSSDKPayInfo(Map parameters)方式为getPayInfo(Map parameters),适用上面两个方法调用。 --- .../me/chanjar/weixin/mp/api/WxMpService.java | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index af574c1b..4cf708f4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -721,31 +721,49 @@ public interface WxMpService { WxMpPrepayIdResult getPrepayId(Map parameters); /** - * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 + * 该接口调用“统一下单”接口,并拼装发起支付请求需要的参数 * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 * @param parameters * the required or optional parameters * @return * @throws WxErrorException */ - Map getJSSDKPayInfo(Map parameters) throws WxErrorException; + Map getPayInfo(Map parameters) throws WxErrorException; /** - * 该接口调用“统一下单”接口,并拼装JSSDK发起支付请求需要的参数 + * 该接口调用“统一下单”接口,并拼装NATIVE发起支付请求需要的参数 * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 + * tradeType 交易类型 NATIVE (其他交易类型JSAPI,APP,WAP) + * @param productId 商户商品ID + * @param outTradeNo 商户端对应订单号 + * @param amt 金额(单位元) + * @param body 商品描述 + * @param ip 发起支付的客户端IP + * @param notifyUrl 通知地址 + * @return + * @throws WxErrorException + * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getPayInfo(Map) instead + */ + @Deprecated + Map getNativePayInfo(String productId, String outTradeNo, double amt, String body, String ip, String notifyUrl) throws WxErrorException; + + /** + * 该接口调用“统一下单”接口,并拼装JSAPI发起支付请求需要的参数 + * 详见http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82 + * tradeType 交易类型 JSAPI(其他交易类型NATIVE,APP,WAP) * @param openId 支付人openId * @param outTradeNo 商户端对应订单号 * @param amt 金额(单位元) * @param body 商品描述 - * @param tradeType 交易类型 JSAPI,NATIVE,APP,WAP * @param ip 发起支付的客户端IP * @param notifyUrl 通知地址 * @return * @throws WxErrorException - * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getJSSDKPayInfo(Map) instead + * @deprecated Use me.chanjar.weixin.mp.api.WxMpService.getPayInfo(Map) instead */ @Deprecated - Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String notifyUrl) throws WxErrorException; + Map getJsapiPayInfo(String openId, String outTradeNo, double amt, String body, String ip, String notifyUrl) throws WxErrorException; + /** * 该接口提供所有微信支付订单的查询,当支付通知处理异常戒丢失的情冴,商户可以通过该接口查询订单支付状态。 From ccdbef3963d0d12b6807e2d4251ab1f4af737ed1 Mon Sep 17 00:00:00 2001 From: fxdfxq Date: Fri, 25 Mar 2016 18:38:36 +0800 Subject: [PATCH 2/3] Update WxMpServiceImpl.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.对应WxMpService类修改getJSSDKPayInfo(Map parameters)方法为getPayInfo(Map parameters)方法 2.增加,1)扫码支付参数拼装方法:getNativePayInfo(String productId,String outTradeNo, double amt, String body,String ip, String callbackUrl) 2)原来的公众号支付参数拼装方法:getJsapiPayInfo(String openId,String outTradeNo, double amt, String body,String ip, String callbackUrl) 3.在getPayInfo(Map parameters)方法中增加codeUrl参数判断,只有在NATIVE方式才返回codeUrl参数。 --- .../weixin/mp/api/WxMpServiceImpl.java | 55 ++++++++++++------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index 7c109be5..f259b0d4 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -821,25 +821,40 @@ public class WxMpServiceImpl implements WxMpService { throw new IllegalArgumentException("Reqiured argument 'product_id' is missing when trade_type is 'NATIVE'."); } + @Override + public Map getJsapiPayInfo(String openId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ + Map packageParams = new HashMap(); + packageParams.put("appid", wxMpConfigStorage.getAppId()); + packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); + packageParams.put("body", body); + packageParams.put("out_trade_no", outTradeNo); + packageParams.put("total_fee", (int) (amt * 100) + ""); + packageParams.put("spbill_create_ip", ip); + packageParams.put("notify_url", callbackUrl); + packageParams.put("trade_type", "JSAPI"); + packageParams.put("openid", openId); + + return getPayInfo(packageParams); + } + + @Override + public Map getNativePayInfo(String productId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ + Map packageParams = new HashMap(); + packageParams.put("appid", wxMpConfigStorage.getAppId()); + packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); + packageParams.put("body", body); + packageParams.put("out_trade_no", outTradeNo); + packageParams.put("total_fee", (int) (amt * 100) + ""); + packageParams.put("spbill_create_ip", ip); + packageParams.put("notify_url", callbackUrl); + packageParams.put("trade_type", "NATIVE"); + packageParams.put("product_id", productId); + + return getPayInfo(packageParams); + } + @Override - public Map getJSSDKPayInfo(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) - throws WxErrorException { - Map packageParams = new HashMap(); - packageParams.put("appid", wxMpConfigStorage.getAppId()); - packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); - packageParams.put("body", body); - packageParams.put("out_trade_no", outTradeNo); - packageParams.put("total_fee", String.format("%.0f", amt * 100)); - packageParams.put("spbill_create_ip", ip); - packageParams.put("notify_url", callbackUrl); - packageParams.put("trade_type", tradeType); - packageParams.put("openid", openId); - - return getJSSDKPayInfo(packageParams); - } - - @Override - public Map getJSSDKPayInfo(Map parameters) throws WxErrorException { + public Map getPayInfo(Map parameters) throws WxErrorException { WxMpPrepayIdResult wxMpPrepayIdResult = getPrepayId(parameters); if (!"SUCCESS".equalsIgnoreCase(wxMpPrepayIdResult.getReturn_code()) @@ -866,7 +881,9 @@ public class WxMpServiceImpl implements WxMpService { payInfo.put("nonceStr", System.currentTimeMillis() + ""); payInfo.put("package", "prepay_id=" + prepayId); payInfo.put("signType", "MD5"); - payInfo.put("code_url",wxMpPrepayIdResult.getCode_url()); + if("NATIVE".equals(parameters.get("trade_type"))){ + payInfo.put("codeUrl", wxMpPrepayIdResult.getCode_url()); + } String finalSign = WxCryptUtil.createSign(payInfo, wxMpConfigStorage.getPartnerKey()); payInfo.put("paySign", finalSign);