|
@@ -128,6 +128,19 @@ public class WechatLogic {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 微信支付服务
|
|
|
+ * @param companyWechatId
|
|
|
+ * @param source 公众号 / 小程序
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public WxPayService getPayJaspWebstiService(String id,String source){
|
|
|
+
|
|
|
+ return WxConfiguration.wxSubPayWebsitServices.get(id);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 微信支付服务(小程序)
|
|
|
* @param companyWechatId
|
|
@@ -386,7 +399,8 @@ public class WechatLogic {
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
- private PayDetail payment(String id, BigDecimal payment, String openId, String profitSharingFlag, String ip, String companyWechatId,String tradeType,Boolean miniPay) throws Exception {
|
|
|
+ private PayDetail payment(String id, BigDecimal payment, String openId, String profitSharingFlag, String ip, String companyWechatId,
|
|
|
+ String tradeType,Boolean miniPay) throws Exception {
|
|
|
|
|
|
if(payment.doubleValue() <= 0){
|
|
|
//throw new RemoteServiceException("支付金额小于等于0,实际支付金额:"+payment);
|
|
@@ -1307,4 +1321,60 @@ public class WechatLogic {
|
|
|
log.info("payDetail:{}",JSONObject.toJSONString(payDetail));
|
|
|
return payDetail;
|
|
|
}
|
|
|
+
|
|
|
+ public PayDetail paymentWebsit(String id, BigDecimal payment, String openId, String profitSharingFlag,
|
|
|
+ String ip, String companyWechatId, Boolean miniPay) throws WxPayException {
|
|
|
+
|
|
|
+
|
|
|
+ if(payment.doubleValue() <= 0){
|
|
|
+ //throw new RemoteServiceException("支付金额小于等于0,实际支付金额:"+payment);
|
|
|
+ PayDetail payDetail = new PayDetail();
|
|
|
+ payDetail.setIsPay(false);
|
|
|
+ payDetail.setId(id);
|
|
|
+ return payDetail;
|
|
|
+ }
|
|
|
+ //撤销订单
|
|
|
+ //this.reverse(id,companyWechatId);
|
|
|
+
|
|
|
+ WxPayService payService =this.getPayJaspWebstiService(companyWechatId,"A");
|
|
|
+
|
|
|
+ WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = new WxPayUnifiedOrderRequest();
|
|
|
+ wxPayUnifiedOrderRequest.setBody("商城支付费用");
|
|
|
+ wxPayUnifiedOrderRequest.setTotalFee((int)ArithUtils.mul(payment.doubleValue(), 100));
|
|
|
+ wxPayUnifiedOrderRequest.setSubOpenid(openId);
|
|
|
+ wxPayUnifiedOrderRequest.setNonceStr(StringUtil.getUUID());
|
|
|
+ wxPayUnifiedOrderRequest.setOutTradeNo(id +"-"+ StringUtil.getRandomSMS());
|
|
|
+ wxPayUnifiedOrderRequest.setAttach(id);//支付通过该方式回调处理
|
|
|
+ //wxPayUnifiedOrderRequest.setTradeType("JSAPI");
|
|
|
+ wxPayUnifiedOrderRequest.setTradeType("JSAPI");
|
|
|
+ wxPayUnifiedOrderRequest.setProductId(id);
|
|
|
+ wxPayUnifiedOrderRequest.setNotifyUrl(payService.getConfig().getNotifyUrl());
|
|
|
+ wxPayUnifiedOrderRequest.setSpbillCreateIp(ip);
|
|
|
+ wxPayUnifiedOrderRequest.setProfitSharing(profitSharingFlag);
|
|
|
+ WxPayUnifiedOrderResult wxPayUnifiedOrderResult = payService.unifiedOrder(wxPayUnifiedOrderRequest);
|
|
|
+ log.info("服务商调起支付result:{}",JSONObject.toJSONString(wxPayUnifiedOrderResult));
|
|
|
+ String returnCode = wxPayUnifiedOrderResult.getReturnCode();
|
|
|
+ if (!StringUtils.equals(returnCode, "SUCCESS")) {
|
|
|
+ throw new RemoteServiceException( "微信调起支付失败:" + wxPayUnifiedOrderResult.getReturnMsg());
|
|
|
+ }
|
|
|
+
|
|
|
+ //二次签名
|
|
|
+ String time = System.currentTimeMillis() / 1000 + "";
|
|
|
+ String prepayId = "prepay_id=" + wxPayUnifiedOrderResult.getPrepayId();
|
|
|
+ String nonceStr = wxPayUnifiedOrderResult.getNonceStr();
|
|
|
+ String twoSign = this.getTwoSign(prepayId, nonceStr, time,payService.getConfig().getSubAppId(),payService.getConfig().getMchKey());
|
|
|
+ PayDetail payDetail = new PayDetail();
|
|
|
+ payDetail.setPayPackage(prepayId);
|
|
|
+ payDetail.setPaySign(twoSign);
|
|
|
+ payDetail.setNonceStr(wxPayUnifiedOrderResult.getNonceStr());
|
|
|
+ payDetail.setTimeStamp(time);
|
|
|
+ payDetail.setCodeUrl(wxPayUnifiedOrderResult.getCodeURL());
|
|
|
+ //h5的url
|
|
|
+ if(StringUtils.isNotBlank(wxPayUnifiedOrderResult.getMwebUrl())) {
|
|
|
+ payDetail.setCodeUrl(wxPayUnifiedOrderResult.getMwebUrl());
|
|
|
+ }
|
|
|
+ payDetail.setId(id);
|
|
|
+ log.info("payDetail:{}",JSONObject.toJSONString(payDetail));
|
|
|
+ return payDetail;
|
|
|
+ }
|
|
|
}
|