电商收付通可视化进件二级商户,多功能升级
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电商收付通可视化进件二级商户,多功能升级相关的知识,希望对你有一定的参考价值。
大家好,我是小悟
能刷到这篇文章的小伙伴,说明你已经对电商收付通有所了解,或者正在了解的路上,就算不了解,不妨先看看 电商收付通系统,可视化进件二级商户 这篇内容,相信对你了解收付通是什么,怎么用,解决什么问题有所帮助。
抽空对电商收付通系统功能进行了升级,主要功能:
服务商账号参数在成后台可配置,随时修改,立即生效。更换服务商账号相关参数无需修改代码再次打包部署,更便捷。参数包括本系统应用名称、服务商平台商户号、商户号绑定的appId、服务商平台商户API证书序列号、服务商平台商户API证书位置路径、微信支付平台证书位置路径、微信支付平台apiV3密钥、微信支付回调通知地址。
在商户管理模块新增了二级商户账户实时余额查询、二级商户预约提现,这两个合为一个功能即余额提现。显示了账户名称、账户账号、商户号、账户可用余额、账户不可用余额。输入提现金额,点击确定即可将账户可用余额提现到账户账号中去。
public AjaxResult subBlance(Long id)
Merchant merchant = merchantMapper.selectMerchantById(id);
QueryBalanceParam param = new QueryBalanceParam();
param.setAppName(appName)
.setMchId(mchId)
.setMchSerialNo(mchSerialNo)
.setWechatSerialNo(wechatSerialNo)
.setMchPrivateKeyPath(mchPrivateKeyPath)
.setWechatPubKeyPath(wechatPubKeyPath);
param.setSub_mchid(merchant.getMchId());
JSONObject queryResult = balanceService.subBlance(param);
QueryBalanceResult result = new QueryBalanceResult();
int queryStatus = queryResult.getInteger("requestStatus");
if (queryStatus == 200)
BigDecimal decimal100 = new BigDecimal("100");
result.setMerchantId(id)
.setAccountName(merchant.getMerchantName())
.setAccountNumber(merchant.getAccountNumber())
.setSubMchid(merchant.getMchId())
.setAvailableAmount(queryResult.getBigDecimal("available_amount").divide(decimal100))
.setPendingAmount(queryResult.getBigDecimal("pending_amount").divide(decimal100));
return AjaxResult.success(result);
else
return AjaxResult.error(queryResult.getString("message"));
native合单支付修改为可以输入金额。
用户管理是用来添加个人用户为分账接收方,需要真实姓名和openid参数值,作为分账接收方,分到的金额是直接到个人零钱包的。
public AjaxResult receiversAdd(UserMember userMember)
try
String encryptName = SignUtils.rsaEncryptOAEP(userMember.getNickname(), CertificateUtils.getCertificate(wechatPubKeyPath));
AddReceiverParam param = new AddReceiverParam();
param.setAppName(appName)
.setMchId(mchId)
.setMchSerialNo(mchSerialNo)
.setWechatSerialNo(wechatSerialNo)
.setMchPrivateKeyPath(mchPrivateKeyPath)
.setWechatPubKeyPath(wechatPubKeyPath);
param.setAppid(appId);
param.setType("PERSONAL_OPENID");
param.setAccount(userMember.getMpOpenId());
param.setRelation_type("OTHERS");
JSONObject addResult = profitsharingService.addReceiver(param);
int addStatus = addResult.getInteger("requestStatus");
String message = addResult.getString("message");
if (addStatus == 200)
userMember.setAppid(appId)
.setUuid(UuidUtils.randomUUID());
this.save(userMember);
return AjaxResult.success();
else
return AjaxResult.error(message);
catch (IllegalBlockSizeException e)
e.printStackTrace();
return AjaxResult.error(e.getMessage());
catch (IOException e)
e.printStackTrace();
return AjaxResult.error(e.getMessage());
订单管理存储的是合单支付的订单数据,可以对订单进行分账、完结分账、退款的操作。
能够进行分账和完结分账的前提,是在下单的时候要标记该订单需要分账后续才可以进行分账和完结分账,分账比例最高30%。
当订单被标记为待分账时,此时订单金额收到商户账户上是不可用状态,默认是180天。分账操作后将订单标记为分账结束,则会将剩余的订单金额变为可用状态,或者如果不想分账的话,直接进行完结分账的操作,此时是将订单全额变为可用状态。
退款是最容易理解的操作,就是将订单金额原路退回给支付者。
public AjaxResult doRefundCombine(Long id)
OrderDetail orderDetail = this.getById(id);
String transactionId = orderDetail.getTransactionId();
String orderStatus = orderDetail.getOrderStatus();
if (StringUtils.isNotBlank(transactionId) && StringUtils.equals(OrderStatusType.HAS_PAY.getType(), orderStatus))
RefundApplyParam param = new RefundApplyParam();
param.setAppName(appName)
.setMchId(mchId)
.setMchSerialNo(mchSerialNo)
.setWechatSerialNo(wechatSerialNo)
.setMchPrivateKeyPath(mchPrivateKeyPath)
.setWechatPubKeyPath(wechatPubKeyPath);
param.setSub_mchid(orderDetail.getSubMchid());
param.setSp_appid(appId);
param.setTransaction_id(orderDetail.getTransactionId());
String outRefundNo = RandomNum.randomUtils(5) + Date2Utils.getCurrentTime() + System.currentTimeMillis();
param.setOut_refund_no(outRefundNo);
RefundAmount amount = new RefundAmount();
amount.setRefund(orderDetail.getSubOrderAmount().intValue());
amount.setTotal(orderDetail.getTotalOrderAmount().intValue());
amount.setCurrency("CNY");
param.setAmount(amount);
JSONObject refundsResult = refundsService.refundApply(param);
int ordersStatus = refundsResult.getInteger("requestStatus");
String message = refundsResult.getString("message");
if (ordersStatus == 200)
orderDetail.setRefundOutTradeNo(outRefundNo)
.setRefundTradeNo(refundsResult.getString("refund_id"))
.setRefundTime(new Date())
.setOrderStatus(OrderStatusType.HAS_REFUND.getType());
this.updateOrderDetail(orderDetail);
return AjaxResult.success();
else
return AjaxResult.error(message);
else
return AjaxResult.error("请选择已支付的订单退款");
收付通在手,生意你有。
公众号【悟空码字】后台回复【收付通升级】获取账号密码。
您的一键三连,是我更新的最大动力,谢谢
山水有相逢,来日皆可期,谢谢阅读,我们再会
我手中的金箍棒,上能通天,下能探海
电商收付通系列⑥,商户进件之查询申请状态
大家好,我是小悟
1、介绍
电商平台通过查询申请状态API查询二级商户入驻申请结果。该查询服务提供两种查询方式,分别是业务申请编号查询和申请单号查询,两种查询方式返回结果一致。
2、通过申请单ID查询申请状态
public static JSONObject applymentsId(String applyment_id)
logger.info("applymentsId param:",applyment_id);
HttpResponse response = HttpUtils.v3HttpExecute("GET",String.format(EcommerceUrl.APPLYMENT_ID,applyment_id),
"自己系统的应用名称","服务商商户号","商户API证书序列号","平台证书序列号","","商户API证书位置.pem",null);
JSONObject body = JSONObject.parseObject(response.body());
logger.info("applymentsId heads result:",response.headers());
logger.info("applymentsId body result:",body);
return body;
3、通过业务申请编号查询申请状态
public static JSONObject outRequestNo(String out_request_no)
logger.info("outRequestNo param:",out_request_no);
HttpResponse response = HttpUtils.v3HttpExecute("GET",String.format(EcommerceUrl.OUT_REQUEST_NO,out_request_no),
"自己系统的应用名称","服务商商户号","商户API证书序列号","平台证书序列号","","商户API证书位置.pem",null);
JSONObject body = JSONObject.parseObject(response.body());
logger.info("outRequestNo heads result:",response.headers());
logger.info("outRequestNo body result:",body);
return body;
4、测试
public static void main(String[] args)
applymentsId("微信支付申请单号");
outRequestNo("业务申请编号");
5、结果
已驳回
该状态下,表示申请单被驳回,商户需要通过驳回原因来修改信息,比如修改商户主体名称、法人名称、超级管理员信息、主体类型等信息,然后重新提交。
审核中
该状态下,表示申请单已提交成功,等待微信平台审核。
待签约
该状态下,表示电商平台可通过查询获取签约链接,引导二级商户的超级管理员完成签约。
完成
该状态下,表示二级商户的超级管理员已完成签约,这个时候生成的二级商户号即可发起支付,完成支付流程,支付款是到这个二级商户上。
您的一键三连,是我更新的最大动力,谢谢
山水有相逢,来日皆可期,谢谢阅读,我们再会
我手中的金箍棒,上能通天,下能探海
以上是关于电商收付通可视化进件二级商户,多功能升级的主要内容,如果未能解决你的问题,请参考以下文章