本文是【淺析微信支付】系列文章的第十三篇,主要講解在如何開(kāi)通商戶平臺(tái)的紅包功能和為用戶發(fā)放紅包,以及查詢發(fā)送紅包記錄。
淺析微信支付系列已經(jīng)更新十三篇了喲~,沒(méi)有看過(guò)的朋友們可以看一下哦。
淺析微信支付:(余額提現(xiàn))企業(yè)付款到微信用戶零錢或銀行卡賬戶
淺析微信支付:申請(qǐng)退款、退款回調(diào)接口、查詢退款
上一篇文章我們說(shuō)到,如果有余額提現(xiàn)
、返利福利
等需求時(shí),就會(huì)用到商家向用戶付款的操作,基于微信支付,上篇我們說(shuō)了付款到用戶余額和銀行卡;本文來(lái)講解如何使用現(xiàn)金紅包的方式向用戶發(fā)送現(xiàn)金紅包
,首先我們來(lái)了解什么是微信的現(xiàn)金紅包。
現(xiàn)金紅包
現(xiàn)金紅包,是微信支付商戶平臺(tái)提供的營(yíng)銷工具之一,上線以來(lái)深受廣大商戶與用戶的喜愛(ài)。商戶可以通過(guò)本平臺(tái)向微信支付用戶發(fā)放現(xiàn)金紅包。用戶領(lǐng)取紅包后,資金到達(dá)用戶微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;
注意:若用戶未領(lǐng)取,資金將會(huì)在24小時(shí)后退回商戶的微信支付賬戶中。
官方文檔地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1
現(xiàn)金紅包意義
微信支付現(xiàn)金紅包因資金的承載方式為現(xiàn)金,一直以來(lái)深受用戶的青睞,近年來(lái)的春晚中,現(xiàn)金紅包都扮演著重要的角色;在日常運(yùn)營(yíng)中也為商戶的營(yíng)銷活動(dòng)帶來(lái)熱烈的反響。總的來(lái)說(shuō),現(xiàn)金紅包在包括但不僅限于以下場(chǎng)景中發(fā)揮著重要意義:
◆ 為企業(yè)拉取新用戶、鞏固老用戶關(guān)系、提升用戶活躍度
◆ 結(jié)合巧妙的創(chuàng)意點(diǎn)子,輔以紅包點(diǎn)綴,打造火爆的活動(dòng),提升企業(yè)與品牌知名度
◆ 結(jié)合企業(yè)運(yùn)營(yíng)活動(dòng),以紅包作為獎(jiǎng)品,使你的抽獎(jiǎng)、滿送等營(yíng)銷活動(dòng)更便利進(jìn)行
◆ 同時(shí),除了營(yíng)銷之外,現(xiàn)金紅包在企業(yè)日常的運(yùn)營(yíng)中也扮演著重要角色。如:為員工返福利、為供應(yīng)商返利、會(huì)員積分/虛擬等級(jí)兌現(xiàn)等等。
什么意思?
簡(jiǎn)單點(diǎn)講,就是現(xiàn)金紅包具有特殊的營(yíng)銷屬性,拿公眾號(hào)來(lái)講,我們可以建立活動(dòng),通過(guò)活動(dòng)的方式為用戶發(fā)送現(xiàn)金紅包,而這個(gè)紅包觸達(dá)的消息是在公眾號(hào)聊天窗口頁(yè)面,這樣也可以引導(dǎo)用戶關(guān)注公眾號(hào)、提升活躍度等等。
開(kāi)通現(xiàn)金紅包
官方文檔如下:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_3&index=2
在使用現(xiàn)金紅包之前,請(qǐng)前往開(kāi)通現(xiàn)金紅包功能。
操作路徑:【登錄微信支付商戶平臺(tái)——>產(chǎn)品中心——>現(xiàn)金紅包——>開(kāi)通】。
可以根據(jù)官方的聲明來(lái)開(kāi)通現(xiàn)金紅包,這里說(shuō)幾個(gè)重要的點(diǎn):
- 入住時(shí)間超過(guò)90天;
- 連續(xù)交易正常交易時(shí)間30天;
一定要注意:上面這兩點(diǎn)是必要條件,很多新注冊(cè)的公司很容易就著了道,入住時(shí)間不夠、交易時(shí)間更不夠,沒(méi)搞明白,活活等了三個(gè)月時(shí)間;如果有小伙伴遇到這樣的情況,可以換一個(gè)滿足要求的主體公司來(lái)解決,我的github代碼中也兼容不同主體的服務(wù)號(hào)使用微信支付相關(guān)功能,小伙伴可以看看源碼WXPayConstants
和WXPay
這兩個(gè)類,調(diào)用接口時(shí)擴(kuò)展WXPayConfigImpl
即可。
說(shuō)明:在開(kāi)通時(shí)請(qǐng)如實(shí)選擇你的使用場(chǎng)景,且在紅包的發(fā)放過(guò)程中如實(shí)上報(bào)你的場(chǎng)景,如有作假,微信支付將有權(quán)根據(jù)《微信支付商戶平臺(tái)使用協(xié)議》對(duì)你的商戶號(hào)做出處理。
開(kāi)發(fā)前的準(zhǔn)備
具體的操作步驟這里就不描述了,小伙伴們可以查看官方文檔:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_3&index=2
上面文檔中已經(jīng)有詳細(xì)的描述,我在這里簡(jiǎn)單描述一下重點(diǎn)注意項(xiàng):
- 下載API證書(shū)
- 充值,保證商戶余額有足夠的錢(一定要注意基本賬戶和運(yùn)營(yíng)賬戶的區(qū)別,一般情況下,有運(yùn)營(yíng)賬戶的時(shí)候,都會(huì)從運(yùn)營(yíng)賬戶中扣款)操作路徑:【登錄商戶平臺(tái)——>交易中心——>資金管理——>充值】
- 獲取openid,指定用戶發(fā)送紅包必須先知道用戶的標(biāo)識(shí)openid,可以根據(jù)網(wǎng)頁(yè)授權(quán)接口獲得
- 設(shè)置紅包參數(shù),操作路徑:【登錄商戶平臺(tái)——>產(chǎn)品中心——>現(xiàn)金紅包——>產(chǎn)品設(shè)置】
對(duì)于第四點(diǎn),可以設(shè)置和更改以下參數(shù)官方解釋如下:
- 調(diào)用IP地址:設(shè)置之后,僅有已設(shè)置的IP地址可以調(diào)用,其余的IP調(diào)用會(huì)報(bào)錯(cuò);
- 用戶領(lǐng)取上限:限制同一openid同一日領(lǐng)取的個(gè)數(shù);
- 防刷等級(jí):防刷是指微信風(fēng)控針對(duì)微信小號(hào)、僵尸號(hào)、機(jī)器號(hào)等的攔截,你可以通過(guò)更改防刷等級(jí)控制防刷的強(qiáng)度;
- 同時(shí),你也可以申請(qǐng)更改紅包額度。但是需要經(jīng)過(guò)微信支付的審核,審核通過(guò)之后才會(huì)生效;
敲黑板!!!重點(diǎn)來(lái)了,以上第一點(diǎn)IP地址,就是我們調(diào)用現(xiàn)金紅包發(fā)放的服務(wù)器IP地址了;第二點(diǎn)也要注意,每個(gè)用戶可以領(lǐng)取的紅包個(gè)數(shù)限制;
最需要注意的是,調(diào)用接口時(shí),發(fā)放紅包使用場(chǎng)景一定要慎重選擇,查看一下每種場(chǎng)景對(duì)應(yīng)的限制,比如在紅包金額大于200或者小于1元時(shí)必傳場(chǎng)景參數(shù),這時(shí)就需要我們配置閥值。
發(fā)放方式(接口發(fā)放)
方式一:接口發(fā)放
商戶根據(jù)開(kāi)發(fā)文檔進(jìn)行開(kāi)發(fā),一次調(diào)用可以給一個(gè)指定用戶發(fā)送一個(gè)指定金額的紅包,滿足多元化的運(yùn)營(yíng)需求。
方式二:通過(guò)上傳openid文件發(fā)放
收集要發(fā)送紅包對(duì)象的openid,將openid編輯成txt文件,登錄微信支付商戶平臺(tái),使用上傳文件功能發(fā)放。一份文件對(duì)應(yīng)一個(gè)紅包模板,便于管理。
方式三:配置營(yíng)銷規(guī)則“滿額送”發(fā)放
商戶可以在商戶平臺(tái)配置自助規(guī)則:用戶使用微信支付發(fā)生交易滿足一定條件,立送現(xiàn)金紅包
本文主要講通過(guò)接口發(fā)放的方式。
接口鏈接
https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack
是否需要證書(shū)
是
調(diào)用接口
官方文檔地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
首先是發(fā)放規(guī)則:
- 發(fā)送頻率限制------默認(rèn)1800/min
- 發(fā)送個(gè)數(shù)上限------按照默認(rèn)1800/min算
- 金額限制------默認(rèn)紅包金額為1-200元,如有需要,可前往商戶平臺(tái)進(jìn)行設(shè)置和申請(qǐng)
- 其他其他限制嗎?------單個(gè)用戶可領(lǐng)取紅包上線為10個(gè)/天,如有需要,可前往商戶平臺(tái)進(jìn)行設(shè)置和申請(qǐng)
- 如果量上滿足不了我們的需求,如何提高各個(gè)上限?------金額上限和用戶當(dāng)天領(lǐng)取次數(shù)上限可以在商戶平臺(tái)進(jìn)行設(shè)置
注意1-紅包金額大于200或者小于1元時(shí),請(qǐng)求參數(shù)scene_id必傳。
注意2-根據(jù)監(jiān)管要求,新申請(qǐng)商戶號(hào)使用現(xiàn)金紅包需要滿足兩個(gè)條件:1、入駐時(shí)間超過(guò)90天 2、連續(xù)正常交易30天。
注意3-移動(dòng)應(yīng)用的appid無(wú)法使用紅包接口。
PS:上面是官方介紹,不難理解,劃重點(diǎn)!!!(注意3的含義,就是只能使用公眾號(hào)的openid,小程序的openid不可用。)
消息觸達(dá)規(guī)則參考官方文檔:
下面開(kāi)始來(lái)干貨,貼出源碼吧,應(yīng)用代碼:
/**
* 發(fā)送現(xiàn)金紅包
*
* @author yclimb
* @date 2018/9/18
*/
private void sendRedPack() throws Exception {
WXPay wxPay = new WXPay(AsydWXPayConfigImpl.getInstance());
Map<String, String> resultMap = wxPay.sendRedPack(WXPayUtil.getPayNo(), "obX_c0YRpT47zKcvq-ZYpjU6GFuA", "1", "活動(dòng)名稱", "紅包祝福語(yǔ)", "備注", "127.0.0.1");
System.out.println("wxPay.sendRedPack:" + resultMap);
}
調(diào)用發(fā)送現(xiàn)金紅包接口:
/**
* 作用:企業(yè)向指定微信用戶的openid發(fā)放指定金額紅包<br>
* 場(chǎng)景:商戶可以通過(guò)本平臺(tái)向微信支付用戶發(fā)放現(xiàn)金紅包。用戶領(lǐng)取紅包后,資金到達(dá)用戶微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;若用戶未領(lǐng)取,資金將會(huì)在24小時(shí)后退回商戶的微信支付賬戶中。
* 接口文檔地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
*
* @param mch_billno 商戶訂單號(hào)
* @param openid 用戶openid
* @param amount 企業(yè)付款金額
* @param act_name 活動(dòng)名稱
* @param wishing 紅包祝福語(yǔ)
* @param remark 備注
* @param spbill_create_ip 該IP可傳用戶端或者服務(wù)端的IP
* @return API返回?cái)?shù)據(jù)
* @throws Exception e
*/
public Map<String, String> sendRedPack(String mch_billno, String openid, String amount, String act_name, String wishing, String remark, String spbill_create_ip) throws Exception {
/** 構(gòu)造請(qǐng)求參數(shù)數(shù)據(jù) **/
Map<String, String> data = new HashMap<>();
// 商戶訂單號(hào) mch_billno 是 10000098201411111234567890 String(28) 商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一。取值范圍:0~9,a~z,A~Z)接口根據(jù)商戶訂單號(hào)支持重入,如出現(xiàn)超時(shí)可再調(diào)用。
data.put("mch_billno", mch_billno);
// 商戶名稱 send_name 是 天虹百貨 String(32) 紅包發(fā)送者名稱
data.put("send_name", "悅店");
// 用戶openid re_openid 是 oxTWIuGaIt6gTKsQRLau2M0yL16E String(32) 接受紅包的用戶openid openid為用戶在wxappid下的唯一標(biāo)識(shí)(獲取openid參見(jiàn)微信公眾平臺(tái)開(kāi)發(fā)者文檔:網(wǎng)頁(yè)授權(quán)獲取用戶基本信息)
data.put("re_openid", openid);
// 付款金額 total_amount 是 1000 int 付款金額,單位分
data.put("total_amount", String.valueOf(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue()));
// 紅包發(fā)放總?cè)藬?shù) total_num 是 1 int 紅包發(fā)放總?cè)藬?shù) total_num=1
data.put("total_num", "1");
// 紅包祝福語(yǔ) wishing 是 感謝您參加猜燈謎活動(dòng),祝您元宵節(jié)快樂(lè)! String(128) 紅包祝福語(yǔ)
data.put("wishing", wishing);
// Ip地址 client_ip 是 192.168.0.1 String(15) 調(diào)用接口的機(jī)器Ip地址
data.put("client_ip", spbill_create_ip);
// 活動(dòng)名稱 act_name 是 猜燈謎搶紅包活動(dòng) String(32) 活動(dòng)名稱
data.put("act_name", act_name);
// 備注 remark 是 猜越多得越多,快來(lái)?yè)專?String(256) 備注信息
data.put("remark", remark);
/** 以下參數(shù)為非必填參數(shù) **/
/*
* 場(chǎng)景id:scene_id 否 PRODUCT_8 String(32) 發(fā)放紅包使用場(chǎng)景,紅包金額大于200或者小于1元時(shí)必傳
* PRODUCT_1:商品促銷
* PRODUCT_2:抽獎(jiǎng)
* PRODUCT_3:虛擬物品兌獎(jiǎng)
* PRODUCT_4:企業(yè)內(nèi)部福利
* PRODUCT_5:渠道分潤(rùn)
* PRODUCT_6:保險(xiǎn)回饋
* PRODUCT_7:彩票派獎(jiǎng)
* PRODUCT_8:稅務(wù)刮獎(jiǎng)
*/
//data.put("scene_id", "PRODUCT_1");
/*
* 活動(dòng)信息 risk_info 否 posttime%3d123123412%26clientversion%3d234134%26mobile%3d122344545%26deviceid%3dIOS String(128)
* posttime:用戶操作的時(shí)間戳
* mobile:業(yè)務(wù)系統(tǒng)賬號(hào)的手機(jī)號(hào),國(guó)家代碼-手機(jī)號(hào)。不需要+號(hào)
* deviceid :mac 地址或者設(shè)備唯一標(biāo)識(shí)
* clientversion :用戶操作的客戶端版本 把值為非空的信息用key=value進(jìn)行拼接,再進(jìn)行urlencode urlencode(posttime=xx& mobile =xx&deviceid=xx)
*/
// 資金授權(quán)商戶號(hào) consume_mch_id 否 1222000096 String(32) 資金授權(quán)商戶號(hào) 服務(wù)商替特約商戶發(fā)放時(shí)使用
/** 以下四個(gè)參數(shù),在 this.redPackRequestData 方法中會(huì)自動(dòng)賦值 **/
// 商戶號(hào) mch_id 是 10000098 String(32) 微信支付分配的商戶號(hào)
// 隨機(jī)字符串 nonce_str 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 隨機(jī)字符串,不長(zhǎng)于32位
// 簽名 sign 是 C380BEC2BFD727A4B6845133519F3AD6 String(32) 詳見(jiàn)簽名生成算法
// 公眾賬號(hào)appid wxappid 是 wx8888888888888888 String(32) 微信分配的公眾賬號(hào)ID(企業(yè)號(hào)corpid即為此appId)。在微信開(kāi)放平臺(tái)(open.weixin.qq.com)申請(qǐng)的移動(dòng)應(yīng)用appid無(wú)法使用該接口。
// 微信調(diào)用接口
Map<String, String> resultMap = this.sendRedPack(data);
WXPayUtil.getLogger().info("wxPay.sendRedPack:" + resultMap);
return resultMap;
}
以上為接口調(diào)用代碼,對(duì)于接口調(diào)用的入?yún)⒑统鰠ⅲ』锇榭纯垂倬W(wǎng)文檔哦,接口中的注釋給大家一個(gè)參考。
官方還提供了一種發(fā)放裂變紅包
的接口,有需要的小伙伴可以了解一下,文檔地址:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4
裂變紅包:一次可以發(fā)放一組紅包。首先領(lǐng)取的用戶為種子用戶,種子用戶領(lǐng)取一組紅包當(dāng)中的一個(gè),并可以通過(guò)社交分享將剩下的紅包給其他用戶。裂變紅包充分利用了人際傳播的優(yōu)勢(shì)。
查詢紅包記錄
用于商戶對(duì)已發(fā)放的紅包進(jìn)行查詢紅包的具體信息,可支持普通紅包和裂變包。
這個(gè)接口很簡(jiǎn)單,就是查詢已經(jīng)發(fā)送的紅包記錄,根據(jù)商戶發(fā)放紅包的商戶訂單號(hào)查詢即可。
接口鏈接
https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo
是否需要證書(shū)
是
調(diào)用接口
應(yīng)用代碼:
/**
* 查詢現(xiàn)金紅包
*
* @author yclimb
* @date 2018/9/18
*/
private void getHbInfo() throws Exception {
WXPay wxPay = new WXPay(AsydWXPayConfigImpl.getInstance());
Map<String, String> resultMap = wxPay.getHbInfo("1502348237482342342");
System.out.println("wxPay.getHbInfo:" + resultMap);
}
查詢接口代碼:
/**
* 作用:查詢紅包記錄<br>
* 場(chǎng)景:用于商戶對(duì)已發(fā)放的紅包進(jìn)行查詢紅包的具體信息,可支持普通紅包和裂變包。
* 接口文檔地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_6&index=5
*
* @param mch_billno 商戶訂單號(hào)
* @return API返回?cái)?shù)據(jù)
* @throws Exception e
*/
public Map<String, String> getHbInfo(String mch_billno) throws Exception {
/** 構(gòu)造請(qǐng)求參數(shù)數(shù)據(jù) **/
Map<String, String> data = new HashMap<>();
// 商戶訂單號(hào) mch_billno 是 10000098201411111234567890 String(28) 商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一。取值范圍:0~9,a~z,A~Z)接口根據(jù)商戶訂單號(hào)支持重入,如出現(xiàn)超時(shí)可再調(diào)用。
data.put("mch_billno", mch_billno);
// 訂單類型 bill_type 是 MCHT String(32) MCHT:通過(guò)商戶訂單號(hào)獲取紅包信息。
data.put("bill_type", "MCHT");
/** 以下四個(gè)參數(shù),在 this.fillRequestData 方法中會(huì)自動(dòng)賦值 **/
// 商戶號(hào) mch_id 是 10000098 String(32) 微信支付分配的商戶號(hào)
// 隨機(jī)字符串 nonce_str 是 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 隨機(jī)字符串,不長(zhǎng)于32位
// 簽名 sign 是 C380BEC2BFD727A4B6845133519F3AD6 String(32) 詳見(jiàn)簽名生成算法
// 公眾賬號(hào)appid appid 是 wx8888888888888888 String(32) 微信分配的公眾賬號(hào)ID(企業(yè)號(hào)corpid即為此appId)。在微信開(kāi)放平臺(tái)(open.weixin.qq.com)申請(qǐng)的移動(dòng)應(yīng)用appid無(wú)法使用該接口。
// 微信調(diào)用接口
Map<String, String> resultMap = this.getHbInfo(data);
WXPayUtil.getLogger().info("wxPay.getHbInfo:" + resultMap);
return resultMap;
}
此接口通過(guò)商戶訂單號(hào)獲取紅包信息,很簡(jiǎn)單,對(duì)于返回參數(shù)小伙伴們可以查看官方文檔,注意一下錯(cuò)誤代碼即可。
結(jié)語(yǔ)
以上為商戶平臺(tái)開(kāi)通現(xiàn)金紅包、指定用戶發(fā)放、紅包記錄查詢
相關(guān)的解釋和源碼,小伙伴們一定要注意看看官方文檔哦,具體的源碼可以看作者的github,里面對(duì)每個(gè)方法有詳細(xì)的注釋。
如果小伙伴有遇到解決不了的問(wèn)題,可以關(guān)注作者微信公眾號(hào),加入討論群中發(fā)出疑問(wèn),和小伙伴們一起解決哦~
預(yù)告:下一篇文章會(huì)講發(fā)放獎(jiǎng)勵(lì)的另一種方式 商戶平臺(tái)代金券或立減優(yōu)惠開(kāi)通、指定用戶發(fā)放、查詢等
,敬請(qǐng)期待!!!
?如果想要提前一覽源碼的小伙伴,可以先看看我的 github,地址如下:
?
??https://github.com/YClimb/wxpay-sdk/blob/master/README.md ?
關(guān)注作者微信公眾號(hào),點(diǎn)擊下方討論群
,掃碼即可加入微信支付討論群
與小伙伴一起探討哦~
到此本文就結(jié)束了,關(guān)注公眾號(hào)查看更多推送!!!