年初五,迎財神 | 一張碼如何實現多渠道(微信、支付寶、雲閃付...)收款

語言: CN / TW / HK

大家好,我是小悟

今天是正月初五,天氣超級好,也是迎財神的日子,祝大家順風順水,財源滾滾,錢兔似錦。

image.png

既然要發財,那自然少不了收款咯。如果你是一個商家,肯定是想收款的方式越方便越好,但支付渠道有那麼多種,也就意味著顧客的支付選擇也是多種。

那總不能把所有的渠道收款碼都貼上吧,那會非常的亂,對顧客來說也極其不方便,一個碼能解決的事情,就不要搞複雜化了。那這個是怎麼實現的呢?

image.png

要實現一碼多渠道收款其實也不難,毋庸置疑,現在主流的支付方式就是微信和支付寶,而在微信和支付寶申請的商戶相同點是都支援餘額、銀行卡和信用卡支付,不同點是微信支援雲閃付支付,支付寶支援花唄支付。所以只要對接了微信和支付寶,那基本上就夠用了。

值得一提的是,隨著微信支付生態的發展,現在想實現這樣的功能是越來越方便了。藉助微信掃普通連結二維碼開啟小程式的功能,無需判斷前端是微信還是支付寶或者其他APP掃碼,可以減少很多工作量。

image.png

所以重點來了,我們都知道,微信和支付寶根據前端不同而有多種支付方式,比如APP支付,H5支付,小程式支付等。

為了實現更全和更簡單的功能,支付寶需要對接H5支付,而微信需要對接的卻是小程式支付。說到這裡你可能就有疑問了,為啥不都是H5支付或都是小程式支付?

image.png

首先對接支付寶H5支付的話,當你使用其他APP比如抖音、快手開啟的時候也可以跳轉到支付寶完成支付,一勞永逸。再者因為微信小程式支付支援雲閃付支付,所以微信對接的是小程式支付。

說到這裡不知道你已經想到實現思路了嗎?是的,前端需要開發一個簡單的頁面,但是再簡單,起碼可以輸入金額吧。然後簡單做下金額正則校驗,因為涉及到H5和小程式,所以可以使用uniapp編寫前端頁面部署更方便,也就是說支付寶部署的是H5,微信部署的是小程式。

我寫的demo是搞了兩個,不要學我哦,怎麼方便怎麼來,左邊是支付寶H5掃出來的樣子,右邊是微信小程式掃出來的樣子。

image.png

支付做多了服務端其實也不復雜,注意,支付寶對接的是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); } }

部署起來後,支付寶基本就這樣了,能支付就行,微信還需要配置一些東西。首先,微信商戶號後臺,支付方式配置,雲閃付需要開啟狀態。

image.png

其次,小程式後臺,需要配置掃普通連結二維碼開啟小程式,將部署的支付寶H5支付連結地址對映到微信小程式的支付頁面,測試範圍選擇線上版,全網釋出即可。這樣,當使用微信掃描該二維碼地址時,就會自動跳轉到微信小程式支付頁面。

image.png

然後使用草料二維碼生成器將H5地址塞到二維碼裡面,就大功告成了,以後使用微信或支付寶,或者其他APP掃碼就可以完成支付了。支援微信、雲閃付、支付寶、花唄、銀行卡、信用卡支付。打完收工。

image.png

一碼在手,生意你有。

您的一鍵三連,是我更新的最大動力,謝謝

山水有相逢,來日皆可期,謝謝閱讀,我們再會

我手中的金箍棒,上能通天,下能探海

上一篇:出乎意料拿了個年度優秀作者