diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java index 05e6f0474..4960ea94c 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java @@ -8,11 +8,13 @@ import com.github.binarywang.wxpay.service.WxEntrustPapService; import com.github.binarywang.wxpay.service.WxPayService; import com.github.binarywang.wxpay.util.SignUtils; import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.util.json.WxGsonBuilder; import org.apache.commons.lang3.StringUtils; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; /** * @author chenliang @@ -26,32 +28,40 @@ public class WxEntrustPapServiceImpl implements WxEntrustPapService { @Override + @SneakyThrows public String mpSign(WxMpEntrustRequest wxMpEntrustRequest) throws WxPayException { wxMpEntrustRequest.checkAndSign(payService.getConfig()); StringBuilder signStrTemp = new StringBuilder(payService.getPayBaseUrl() + "/papay/entrustweb"); signStrTemp.append("?appid=").append(wxMpEntrustRequest.getAppid()); signStrTemp.append("&contract_code=").append(wxMpEntrustRequest.getContractCode()); - signStrTemp.append("&contract_display_account=").append(URLEncoder.encode(wxMpEntrustRequest.getContractDisplayAccount())); - signStrTemp.append("&mch_id=").append(wxMpEntrustRequest.getMchId()).append("¬ify_url=").append(URLEncoder.encode(wxMpEntrustRequest.getNotifyUrl())); + signStrTemp.append("&contract_display_account=") + .append(URLEncoder.encode(wxMpEntrustRequest.getContractDisplayAccount(), StandardCharsets.UTF_8.name())); + signStrTemp.append("&mch_id=").append(wxMpEntrustRequest.getMchId()).append("¬ify_url=") + .append(URLEncoder.encode(wxMpEntrustRequest.getNotifyUrl(), StandardCharsets.UTF_8.name())); signStrTemp.append("&plan_id=").append(wxMpEntrustRequest.getPlanId()); - signStrTemp.append("&request_serial=").append(wxMpEntrustRequest.getRequestSerial()).append("×tamp=").append(wxMpEntrustRequest.getTimestamp()); - if (StringUtils.isNotEmpty(wxMpEntrustRequest.getReturnWeb())) { + signStrTemp.append("&request_serial=").append(wxMpEntrustRequest.getRequestSerial()).append("×tamp=") + .append(wxMpEntrustRequest.getTimestamp()); + // 根据微信支付文档,returnWeb字段只在值为1时需要添加到URL参数中,表示返回签约页面的referrer url + if (wxMpEntrustRequest.getReturnWeb() != null && wxMpEntrustRequest.getReturnWeb() == 1) { signStrTemp.append("&return_web=").append(wxMpEntrustRequest.getReturnWeb()); } if (StringUtils.isNotEmpty(wxMpEntrustRequest.getOuterId())) { - signStrTemp.append("&outerid=").append(URLEncoder.encode(wxMpEntrustRequest.getOuterId())); + signStrTemp.append("&outerid=").append(URLEncoder.encode(wxMpEntrustRequest.getOuterId(), StandardCharsets.UTF_8.name())); } - signStrTemp.append("&version=").append(wxMpEntrustRequest.getVersion()).append("&sign=").append(wxMpEntrustRequest.getSign()); + signStrTemp.append("&version=").append(wxMpEntrustRequest.getVersion()).append("&sign=") + .append(wxMpEntrustRequest.getSign()); return signStrTemp.toString(); } @Override + @SneakyThrows public String maSign(WxMaEntrustRequest wxMaEntrustRequest) throws WxPayException { wxMaEntrustRequest.checkAndSign(payService.getConfig()); - wxMaEntrustRequest.setNotifyUrl(URLEncoder.encode(wxMaEntrustRequest.getNotifyUrl())); + wxMaEntrustRequest.setNotifyUrl(URLEncoder.encode(wxMaEntrustRequest.getNotifyUrl(), StandardCharsets.UTF_8.name())); return wxMaEntrustRequest.toString(); } + @SneakyThrows @Override public WxH5EntrustResult h5Sign(WxH5EntrustRequest wxH5EntrustRequest) throws WxPayException { wxH5EntrustRequest.checkAndSign(payService.getConfig()); @@ -70,11 +80,11 @@ public class WxEntrustPapServiceImpl implements WxEntrustPapService { StringBuilder strBuilder = new StringBuilder(url); strBuilder.append("?appid=").append(wxH5EntrustRequest.getAppid()); strBuilder.append("&contract_code=").append(wxH5EntrustRequest.getContractCode()); - strBuilder.append("&contract_display_account=").append(URLEncoder.encode(wxH5EntrustRequest.getContractDisplayAccount())); - strBuilder.append("&mch_id=").append(wxH5EntrustRequest.getMchId()).append("¬ify_url=").append(URLEncoder.encode(wxH5EntrustRequest.getNotifyUrl())); + strBuilder.append("&contract_display_account=").append(URLEncoder.encode(wxH5EntrustRequest.getContractDisplayAccount(), StandardCharsets.UTF_8.name())); + strBuilder.append("&mch_id=").append(wxH5EntrustRequest.getMchId()).append("¬ify_url=").append(URLEncoder.encode(wxH5EntrustRequest.getNotifyUrl(), StandardCharsets.UTF_8.name())); strBuilder.append("&plan_id=").append(wxH5EntrustRequest.getPlanId()); if (StringUtils.isNotEmpty(wxH5EntrustRequest.getOuterId())) { - strBuilder.append("&outerid=").append(URLEncoder.encode(wxH5EntrustRequest.getOuterId())); + strBuilder.append("&outerid=").append(URLEncoder.encode(wxH5EntrustRequest.getOuterId(), StandardCharsets.UTF_8.name())); } if (StringUtils.isNotEmpty(wxH5EntrustRequest.getReturnAppid())) { strBuilder.append("&return_appid=").append(wxH5EntrustRequest.getReturnAppid());