| @@ -99,5 +99,7 @@ alter table wx_cash_out_97 ADD COLUMN `real_name` varchar(32) COMMENT '实 | |||
| alter table wx_cash_out_98 ADD COLUMN `real_name` varchar(32) COMMENT '实名姓名,超2000需实名'; | |||
| alter table wx_cash_out_99 ADD COLUMN `real_name` varchar(32) COMMENT '实名姓名,超2000需实名'; | |||
| alter table wx_pay_account change column private_cert_path private_cert_pem_path varchar(255); | |||
| alter table wx_pay_account add COLUMN `merchant_key_path` varchar(100) COMMENT '商户key证书路径'; | |||
| alter table wx_pay_account add COLUMN `merchant_apiv3_key` varchar(100) COMMENT '商户apiV3Key'; | |||
| alter table wx_pay_account add COLUMN `merchant_apiv3_key` varchar(100) COMMENT '商户apiV3Key'; | |||
| alter table wx_pay_account add COLUMN `merchant_cert_pem_path` varchar(100) COMMENT '商户证书密钥文件'; | |||
| @@ -123,7 +123,6 @@ public class WxBillController extends BaseController { | |||
| map.put("businessType", EnumFlowKey.BILL_FINISH.getCode()); | |||
| //map.put("payMoney", wxBillAll.getNewPrice()); | |||
| map.put("businessId", wxBillAll.getId()); | |||
| map.put("payImg", wxBillAll.getPayImg()); | |||
| List<Map> variablesList = new ArrayList<Map>(); | |||
| Map billTypeMap = new HashMap<String,Object>(); | |||
| billTypeMap.put("key","billType"); | |||
| @@ -145,6 +144,11 @@ public class WxBillController extends BaseController { | |||
| newPriceMap.put("value",wxBillAll.getNewPrice()); | |||
| variablesList.add(newPriceMap); | |||
| Map payImgMap = new HashMap<String,Object>(); | |||
| payImgMap.put("key","payImg"); | |||
| payImgMap.put("value",wxBillAll.getPayImg()); | |||
| variablesList.add(payImgMap); | |||
| map.put("variables", variablesList); | |||
| map.put("phone", buser.getPhone()); | |||
| wxFlowService.start(map, buser.getId(), buser.getName(), this.getTenantInfo()); | |||
| @@ -2,10 +2,12 @@ package com.iformall.controller; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.AuthIgnore; | |||
| import com.iformall.common.Result; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.BaseEntity.SortField; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.enums.EnumCashOutStatus; | |||
| import com.iformall.enums.EnumPayShare; | |||
| import com.iformall.enums.EnumPayWay; | |||
| @@ -165,7 +167,6 @@ public class WxCashOutController extends BaseController { | |||
| @ApiOperation("微信B端提现") | |||
| @PostMapping("cashout") | |||
| public ResultData cashout(@RequestBody WxCashOut wxCashOut) { | |||
| logger.info(">>>cashout>>>"+JSON.toJSONString(wxCashOut)); | |||
| WxMerchantBUser buser = getLoginBUser(); | |||
| CUser user = getCUser(); | |||
| WxMerchant merchant = wxMerchantService.getById(buser.getMerchantId()); | |||
| @@ -201,5 +202,13 @@ public class WxCashOutController extends BaseController { | |||
| // WxMerchantBUser buser = getLoginBUser(); | |||
| // return wxCashOutService.reCashout(buser, wxCashOut,EnumPayWay.PAY_WAY_WECHAT); | |||
| // } | |||
| @AuthIgnore | |||
| @GetMapping("test") | |||
| public String test() { | |||
| TenantEntity te = new TenantEntity(); | |||
| te.setTenantId("789"); | |||
| wxCashOutService.cashOutToWx(EnumPayWay.PAY_WAY_WECHAT,te, 714465978943332352L); | |||
| return "ok"; | |||
| } | |||
| } | |||
| @@ -26,14 +26,18 @@ public class WxPayAccount extends TenantEntity { | |||
| private String notifyUrl; | |||
| @io.swagger.annotations.ApiModelProperty(value="tt回调token",name="notifyToken") | |||
| private String notifyToken; | |||
| @io.swagger.annotations.ApiModelProperty(value="证书本地存放位置",name="certPath") | |||
| @io.swagger.annotations.ApiModelProperty(value="平台证书本地存放位置",name="certPath") | |||
| private String certPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="商户自己的证书",name="merchantCertPath") | |||
| private String merchantCertPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="商户自己的证书密钥文件",name="merchantCertPemPath") | |||
| private String merchantCertPemPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="商户自己的密钥文件",name="merchantKeyPath") | |||
| private String merchantKeyPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="商户自己的apiv3密钥",name="merchantApiv3Key") | |||
| private String merchantApiv3Key; | |||
| @io.swagger.annotations.ApiModelProperty(value="商户模式-0:普通商户模式1:服务商模式",name="type") | |||
| private Integer type; | |||
| @io.swagger.annotations.ApiModelProperty(value="是否开启分账(0:未开启分账1:开启分账)",name="type") | |||
| @@ -66,8 +70,8 @@ public class WxPayAccount extends TenantEntity { | |||
| private String certSerialNo; | |||
| @io.swagger.annotations.ApiModelProperty(value="平台私钥文件",name="privateKeyPath") | |||
| private String privateKeyPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="平台证书文件,同certPath",name="privateCertPath") | |||
| private String privateCertPath; | |||
| @io.swagger.annotations.ApiModelProperty(value="平台证书密钥文件",name="privateCertPemPath") | |||
| private String privateCertPemPath; | |||
| // @io.swagger.annotations.ApiModelProperty(value="app平台 EnumAppPlat ",name="plat") | |||
| // private Integer plat; | |||
| @@ -8,6 +8,7 @@ import java.util.Map; | |||
| import javax.crypto.IllegalBlockSizeException; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | |||
| import com.github.binarywang.wxpay.config.WxPayConfig; | |||
| import com.github.binarywang.wxpay.exception.WxPayException; | |||
| import com.github.binarywang.wxpay.service.WxPayService; | |||
| @@ -270,7 +271,9 @@ public class WxPay { | |||
| X509Certificate certificate = payService.getConfig().getVerifier().getValidCertificate(); | |||
| List<WxCashOutPV3Item> items = cashOutV3.getTransfer_detail_list(); | |||
| for (WxCashOutPV3Item it : items) { | |||
| it.setUser_name(RsaCryptoUtil.encryptOAEP(it.getUser_name(), certificate)); | |||
| if (!StringUtils.isBlank(it.getUser_name())) { | |||
| it.setUser_name(RsaCryptoUtil.encryptOAEP(it.getUser_name(), certificate)); | |||
| } | |||
| } | |||
| return payService.postV3WithWechatpaySerial(MERCHANT_TRANSFER_CHANGE_URL, JSON.toJSONString(cashOutV3)); | |||
| } | |||
| @@ -214,7 +214,7 @@ public class WxCashOutAdapterService implements CashOutAdapterService{ | |||
| return new CashOutAdapterResult(false, EnumCashOutStatus.FAIL.getCode(), "零钱支付失败。商户密钥ApiV3为空。请联系管理员配置。", null); | |||
| } | |||
| WxPayService payService = maUtil.getWxPayService(appInfo,payAccount); | |||
| WxPayService payService = maUtil.getWxPayServiceBySelfModel(appInfo,payAccount); | |||
| if (null == payService) { | |||
| return new CashOutAdapterResult(false, EnumCashOutStatus.FAIL.getCode(), "零钱支付失败。当前小程序未查询到payService。", null); | |||
| } | |||
| @@ -225,7 +225,7 @@ public class WxCashOutAdapterService implements CashOutAdapterService{ | |||
| log.error("零钱支付异常: " + e.getMessage(),e); | |||
| return new CashOutAdapterResult(false, EnumCashOutStatus.FAIL.getCode(), "微信零钱支付接口调用异常."+e.getMessage(), null); | |||
| } | |||
| //log.info("微信零钱支付:" + wxCashOutP.toString() +", response: " + response.toString()); | |||
| log.info("微信零钱支付:, response: " + response.toString()); | |||
| return generateResult(response,cashOut); | |||
| // if (payAccount.getType() == EnumPayMode.MCH.getCode()) { | |||
| @@ -290,7 +290,7 @@ public class WxCashOutAdapterService implements CashOutAdapterService{ | |||
| log.error("零钱支付查询异常: " + e.getMessage(),e); | |||
| throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), "微信零钱支付查询接口异常:"+e.getMessage()); | |||
| } | |||
| //log.info("微信零钱支付查询:"+ response.toString()); | |||
| log.info("微信零钱支付查询:"+ response.toString()); | |||
| return getReusltFromQuery(response,cashOut); | |||
| } | |||
| @@ -117,7 +117,7 @@ public class MaUtil { | |||
| config.setSubMchId(payAccount.getSubMchId()); | |||
| config.setKeyPath(payAccount.getCertPath()); | |||
| config.setPrivateKeyPath(payAccount.getPrivateKeyPath()); | |||
| config.setPrivateCertPath(payAccount.getPrivateCertPath()); | |||
| config.setPrivateCertPath(payAccount.getPrivateCertPemPath()); | |||
| //config.setCertSerialNo(payAccount.getCertSerialNo()); | |||
| config.setApiV3Key(payAccount.getApiV3Key()); | |||
| }else { | |||
| @@ -128,7 +128,7 @@ public class MaUtil { | |||
| config.setSubMchId(payAccount.getSubMchId()); | |||
| config.setKeyPath(payAccount.getMerchantKeyPath()); | |||
| config.setPrivateKeyPath(payAccount.getMerchantKeyPath()); | |||
| config.setPrivateCertPath(payAccount.getMerchantCertPath()); | |||
| config.setPrivateCertPath(payAccount.getMerchantCertPemPath()); | |||
| //config.setCertSerialNo(payAccount.getCertSerialNo()); | |||
| config.setApiV3Key(payAccount.getMerchantApiv3Key()); | |||
| } | |||
| @@ -17,6 +17,7 @@ | |||
| <result column="cert_path" jdbcType="VARCHAR" property="certPath"/> | |||
| <result column="merchant_cert_path" jdbcType="VARCHAR" property="merchantCertPath"/> | |||
| <result column="merchant_cert_pem_path" jdbcType="VARCHAR" property="merchantCertPemPath"/> | |||
| <result column="type" jdbcType="INTEGER" property="type"/> | |||
| <result column="share" jdbcType="INTEGER" property="share"/> | |||
| <result column="rate" jdbcType="INTEGER" property="rate"/> | |||
| @@ -27,13 +28,13 @@ | |||
| <result column="api_v3_key" jdbcType="VARCHAR" property="apiV3Key"/> | |||
| <result column="cert_serial_no" jdbcType="VARCHAR" property="certSerialNo"/> | |||
| <result column="private_key_path" jdbcType="VARCHAR" property="privateKeyPath"/> | |||
| <result column="private_cert_path" jdbcType="VARCHAR" property="privateCertPath"/> | |||
| <result column="private_cert_pem_path" jdbcType="VARCHAR" property="privateCertPemPath"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| `id`,`tenant_id`,`parent_tenant_id`,`mch_id`,`sub_mch_id`,`sub_app_id`,`api_key`,`merchant_api_key`,`notify_url`,`notify_token`,`cert_path`, | |||
| `merchant_cert_path`,`type`,`share`,`rate`,`real_rate`, | |||
| `service_id`,`pay_score_notify_url`,`api_v3_key`,`cert_serial_no`,`private_key_path`,`private_cert_path`,`merchant_key_path`,`merchant_apiv3_key` | |||
| `merchant_cert_path`,`type`,`share`,`rate`,`real_rate`,`service_id`,`pay_score_notify_url`,`api_v3_key`,`cert_serial_no`,`private_key_path`, | |||
| `private_cert_pem_path`,`merchant_key_path`,`merchant_apiv3_key`,`merchant_cert_pem_path` | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||