共计 3773 个字符,预计需要花费 10 分钟才能阅读完成。
大家好,我是小悟
明天是正月初五,天气超级好,也是迎财神的日子,祝大家逆风逆水,财源滚滚,钱兔似锦。
既然要发财,那天然少不了收款咯。如果你是一个商家,必定是想收款的形式越不便越好,但领取渠道有那么多种,也就意味着顾客的领取抉择也是多种。
那总不能把所有的渠道收款码都贴上吧,那会十分的乱,对顾客来说也极其不不便,一个码能解决的事件,就不要搞复杂化了。那这个是怎么实现的呢?
要实现一码多渠道收款其实也不难,毋庸置疑,当初支流的领取形式就是微信和支付宝,而在微信和支付宝申请的商户相同点是都反对余额、银行卡和信用卡领取,不同点是微信反对云闪付领取,支付宝反对花呗领取。所以只有对接了微信和支付宝,那基本上就够用了。
值得一提的是,随着微信领取生态的倒退,当初想实现这样的性能是越来越不便了。借助微信扫一般链接二维码关上小程序的性能,无需判断前端是微信还是支付宝或者其余 APP 扫码,能够缩小很多工作量。
所以重点来了,咱们都晓得,微信和支付宝依据前端不同而有多种领取形式,比方 APP 领取,H5 领取,小程序领取等。
为了实现更全和更简略的性能,支付宝须要对接 H5 领取,而微信须要对接的却是小程序领取。说到这里你可能就有疑难了,为啥不都是 H5 领取或都是小程序领取?
首先对接支付宝 H5 领取的话,当你应用其余 APP 比方抖音、快手关上的时候也能够跳转到支付宝实现领取,一劳永逸。再者因为微信小程序领取反对云闪付领取,所以微信对接的是小程序领取。
说到这里不晓得你曾经想到实现思路了吗?是的,前端须要开发一个简略的页面,然而再简略,起码能够输出金额吧。而后简略做下金额正则校验,因为波及到 H5 和小程序,所以能够应用 uniapp 编写前端页面部署更不便,也就是说支付宝部署的是 H5,微信部署的是小程序。
我写的 demo 是搞了两个,不要学我哦,怎么不便怎么来,右边是支付宝 H5 扫出来的样子,左边是微信小程序扫出来的样子。
![上传中 …]()
领取做多了服务端其实也不简单,留神,支付宝对接的是 H5 领取,微信对接的是小程序领取,简略贴一下代码。须要写回调的话也肯定不要忘了哦。
支付宝 H5 领取
public AjaxResult aliPayH5(PayModel payModel) {payModel.setBody("支付宝 H5 领取").setSubject("支付宝 H5 领取");
String outTradeNo = IdUtil.getSnowflake(1,1).nextIdStr();
payModel.setOutTradeNo(outTradeNo).setPassbackParams(outTradeNo);
String form = aliPayService.aliPayH5(payModel);
if(StringUtils.isNotBlank(form)) {Map<String, Object> result = new HashMap<>(2);
result.put("form", form);
return AjaxResult.success(result);
}
return AjaxResult.error("数据筹备异样");
}
微信小程序领取
public AjaxResult jsapiMaPayCommon(JsapiOrderParam param, HttpServletRequest request) {String openId = param.getOpenId();
String remoteAddr = IpUtils.getIpAddr(request);
String outTradeNo = IdUtil.getSnowflake(1,1).nextIdStr();
BigDecimal decimal100 = new BigDecimal("100");
BigDecimal orderAmount = new BigDecimal(String.valueOf(param.getAmount()));
JsapiParam jsapiParam = new JsapiParam();
jsapiParam.setAppid(wechatProperties.getMaAppId())
.setMchid(wechatProperties.getMchId())
.setDescription("微信小程序领取")
.setOut_trade_no(outTradeNo)
.setAttach(outTradeNo)
.setNotify_url(wechatProperties.getNotifyUrlCommon());
Amount amount = new Amount();
amount.setTotal(decimal100.multiply(orderAmount).intValue());
jsapiParam.setAmount(amount);
Payer payer = new Payer();
payer.setOpenid(openId);
jsapiParam.setPayer(payer);
SceneInfo sceneInfo = new SceneInfo();
sceneInfo.setDevice_id("POS1:12");
sceneInfo.setPayer_client_ip(remoteAddr);
jsapiParam.setScene_info(sceneInfo);
BaseParam baseParam = new BaseParam();
baseParam.setAppName(wechatProperties.getAppName())
.setMchId(wechatProperties.getMchId())
.setMchSerialNo(wechatProperties.getMchSerialNo())
.setWechatSerialNo(wechatProperties.getWechatSerialNo())
.setMchPrivateKeyPath(wechatProperties.getMchPrivateKeyPath())
.setWechatPubKeyPath(wechatProperties.getWechatPubKeyPath());
JSONObject result = wechatService.jsapiPay(jsapiParam, baseParam);
int status = result.getInteger("requestStatus");
if (status == 200) {SortedMap<Object, Object> params = new TreeMap<>();
String timestamp = Long.toString(System.currentTimeMillis() / 1000);
String nonceStr = UuidUtils.randomUUID();
String packageParam = "prepay_id=" + result.getString("prepay_id");
String paySign = SignUtils.paySign(wechatProperties.getMaAppId(), timestamp, nonceStr, packageParam,
wechatProperties.getMchPrivateKeyPath());
params.put("appId", wechatProperties.getMaAppId());
params.put("timeStamp", timestamp);
params.put("paySign", paySign);
params.put("signType", "RSA");
params.put("nonceStr", nonceStr);
params.put("package", "prepay_id=" + result.getString("prepay_id"));
logger.info("params:{}",params);
return AjaxResult.success(params);
} else {return AjaxResult.error(result.getString("message"), result);
}
}
部署起来后,支付宝根本就这样了,能领取就行,微信还须要配置一些货色。首先,微信商户号后盾,领取形式配置,云闪付须要开启状态。
其次,小程序后盾,须要配置扫一般链接二维码关上小程序,将部署的支付宝 H5 领取链接地址映射到微信小程序的领取页面,测试范畴抉择线上版,全网公布即可。这样,当应用微信扫描该二维码地址时,就会主动跳转到微信小程序领取页面。
而后应用草料二维码生成器将 H5 地址塞到二维码外面,就功败垂成了,当前应用微信或支付宝,或者其余 APP 扫码就能够实现领取了。反对微信、云闪付、支付宝、花呗、银行卡、信用卡领取。打完出工。
一码在手,生意你有。
您的一键三连,是我更新的最大能源,谢谢
山水有相逢,来日皆可期,谢谢浏览,咱们再会
我手中的金箍棒,上能通天,下能探海
上一篇:给大家筹备了程序员专属红包封面,审核通过后我哭了,太心酸了(┬_┬)