微信支付代金券開發(fā)包分享
點擊上方藍色“程序猿DD”,選擇“設(shè)為星標”
回復“資源”獲取獨家整理的學習資料!

1. 前言
距離上次發(fā)原創(chuàng)分享應(yīng)該有 12 天了,最近忙里忙外的,無論是 Spring Security OAuth2 相關(guān)的,還是微信支付相關(guān)的都留了很多坑沒有來得及去補,所以十分抱歉。今天得空趕緊分享一些有用的東西。今天就分享一下關(guān)于微信支付代金券的一些開發(fā)知識。
2. 微信支付營銷
微信支付提供了商家券、代金券、立減金等營銷能力來幫助商家進行拉新?;?,增強與用戶的互動性。從開發(fā)層面上來說比接入微信支付要難一些,而且涉及的策略也會更多一些。那么本次分享胖哥將分享自己的一些經(jīng)驗。
3. 開發(fā)前準備
開發(fā)前我們需要申請微信支付相關(guān)的賬號,手續(xù)還是比較多的。
微信商戶賬號
地址為https://pay.weixin.qq.com 用來開通微信支付能力,沒有商戶號是無法使用微信支付的。而且后續(xù)申請的公眾號 appid 和移動應(yīng)用、小程序的 appid 都要同微信商戶帳號進行綁定。
微信開放平臺賬號
地址為https://open.weixin.qq.com 用來開發(fā)第三方平臺、移動應(yīng)用、公眾平臺、網(wǎng)站應(yīng)用的開發(fā)。后續(xù)申請的微信公眾號服務(wù)號、移動應(yīng)用 appid 需要綁定到開放平臺中。
微信公眾平臺服務(wù)號
通過https://mp.weixin.qq.com申請,?切記是服務(wù)號,不是訂閱號,也不是個人號!服務(wù)號才是企業(yè)開發(fā)用的。申請認證完畢后需要同微信商戶帳號和微信開放平臺帳號進行綁定。
具體的操作步驟去查看官方指引,總之需要準備的材料是比較多的,而且走的流程也比較多,需要專人去辦理。
4. 微信支付 V3
在之前對微信支付 V3 的一些難點胖哥也做了一些介紹。其實這個東西你研究了才會發(fā)現(xiàn),無論微信支付也好還是支付寶也好都是下面的流程:
收集對應(yīng) API 的參數(shù)。 對參數(shù)進行簽名。 請求對應(yīng)的 API 對響應(yīng)的來源的驗證以確保響應(yīng)來自支付服務(wù)器。 對響應(yīng)進行解析。 對回調(diào)請求的響應(yīng)。
所以針對上面的流程,胖哥做了一個小小的模型設(shè)計,以代金券創(chuàng)建為例:
/**
?*?創(chuàng)建代金券批次API.
?*
?*?@param?params?the?params
?*?@return?the?wechat?response?entity
?*/
public?WechatResponseEntity?createStock(StocksCreateParams?params)? {
????WechatResponseEntity?wechatResponseEntity?=?new?WechatResponseEntity<>();
????//?1.?根據(jù)請求類型組織參數(shù)
????this.client().withType(WechatPayV3Type.MARKETING_FAVOR_STOCKS_COUPON_STOCKS,?params)
????????//?2.?對參數(shù)進行歸納處理
????????????.function(this::createStocksFunction)
????????//?3.?嵌入對結(jié)果進行消費的邏輯
????????????.consumer(wechatResponseEntity::convert)
????????????.request();
????return?wechatResponseEntity;
}
無論微信支付 V3 的哪個 API 都可以按照上面的模型進行封裝。
5. 微信支付開發(fā)包
針對上面的設(shè)計,以 Spring Boot Starter 的形式封裝了一個開發(fā)包,第三方依賴幾乎為零。僅僅使用了 Spring 框架提供的RestTemplate和Jackson類庫。目前對代金券封裝已經(jīng)結(jié)束并進行了測試,其它的 API 封裝只剩下體力活了,我會盡快完善。
github : https://github.com/NotFound403/payment-spring-boot.git
集成
以Spring Boot Starter的形式集成到項目中,目前并沒有提交到 maven 中央倉庫,需要自己編譯安裝。
??????<dependency>
????????????<groupId>cn.felordgroupId>
????????????<artifactId>payment-spring-boot-starterartifactId>
????????????<version>1.0.0.RELEASEversion>
??????dependency>
配置
在 Spring Boot 項目中的application.yaml中配置wechat.pay相關(guān)參數(shù)。
wechat:
??pay:
????v3:
#??應(yīng)用appId?必填
??????app-id:?xxxxxxxx
#??api?密鑰?必填
??????app-secret:?xxxxxxxxxxx
#??api?v3?密鑰?必填
??????app-v3-secret:?xxxxxxxx
#??微信支付商戶號?必填
??????mch-id:?xxxxxxx
#??合作商?選填
??????partner-key:
#??商戶服務(wù)器域名?用于回調(diào)??需要放開回調(diào)接口的安全策略?必填
??????domain:?https://xxxx.xxx.com
#??商戶?api?證書?必填
??????cert-path:?apiclient_cert.p12
#??微信服務(wù)號?優(yōu)惠券必須
??????mp:
????????app-id:?xxxxxxxxx
????????app-secret:?xxxxxxxxxxxxxxxxxxx
然后啟用@EnableWechatPay注解:
@EnableMobilePay
@Configuration
public?class?PayConfig?{
}
請注意:只有
wechat.pay.v3.app-id設(shè)置了有效值才能啟用下面的 API。
API 使用
微信支付 V3 開放接口引入:
????//?支付API
????@Autowired
????WechatPayApi?wechatPayV3Api;
????//?營銷API
????@Autowired
????WechatMarketingApi??wchatMarketingApi;
例如查詢優(yōu)惠券
?????//?查詢商戶下的優(yōu)惠券
?????@Test
?????public?void?v3MchStocks()?{
?????????StocksQueryParams?params?=?new?StocksQueryParams();
?????????params.setOffset(0);
?????????params.setLimit(10);
?????????WechatResponseEntity?objectNodeWechatResponseEntity?=?wechatPayV3Api.queryStocksByMch(params);
?????????System.out.println("objectNodeWechatResponseEntity?=?"?+?objectNodeWechatResponseEntity);
?????}
如果你在微信支付中有什么疑問可以給我留言,知無不答。感謝對胖哥的關(guān)注。
推薦關(guān)注本文作者

【往期推薦】
2020-12-05
2020-12-05
2020-12-04
2020-12-04
2020-12-03
2020-12-03
﹀
﹀
﹀
深度內(nèi)容
推薦加入




