淺析微信支付:商戶平臺開通現金紅包、指定使用者發放、紅包記錄查詢

YClimb發表於2019-03-02

本文是【淺析微信支付】系列文章的第十三篇,主要講解在如何開通商戶平臺的紅包功能和為使用者發放紅包,以及查詢傳送紅包記錄。


淺析微信支付系列已經更新十三篇了喲~,沒有看過的朋友們可以看一下哦。

淺析微信支付:(餘額提現)企業付款到微信使用者零錢或銀行卡賬戶

淺析微信支付:支付驗收示例和驗收指引

淺析微信支付:如何使用沙箱環境測試

淺析微信支付:申請退款、退款回撥介面、查詢退款

上一篇文章我們說到,如果有餘額提現返利福利等需求時,就會用到商家向使用者付款的操作,基於微信支付,上篇我們說了付款到使用者餘額和銀行卡;本文來講解如何使用現金紅包的方式向使用者傳送現金紅包,首先我們來了解什麼是微信的現金紅包。

現金紅包

現金紅包,是微信支付商戶平臺提供的營銷工具之一,上線以來深受廣大商戶與使用者的喜愛。商戶可以通過本平臺向微信支付使用者發放現金紅包。使用者領取紅包後,資金到達使用者微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;

注意:若使用者未領取,資金將會在24小時後退回商戶的微信支付賬戶中。

官方文件地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1
複製程式碼

現金紅包意義

微信支付現金紅包因資金的承載方式為現金,一直以來深受使用者的青睞,近年來的春晚中,現金紅包都扮演著重要的角色;在日常運營中也為商戶的營銷活動帶來熱烈的反響。總的來說,現金紅包在包括但不僅限於以下場景中發揮著重要意義:

◆ 為企業拉取新使用者、鞏固老使用者關係、提升使用者活躍度
◆ 結合巧妙的創意點子,輔以紅包點綴,打造火爆的活動,提升企業與品牌知名度
◆ 結合企業運營活動,以紅包作為獎品,使你的抽獎、滿送等營銷活動更便利進行
◆ 同時,除了營銷之外,現金紅包在企業日常的運營中也扮演著重要角色。如:為員工返福利、為供應商返利、會員積分/虛擬等級兌現等等。

什麼意思?
簡單點講,就是現金紅包具有特殊的營銷屬性,拿公眾號來講,我們可以建立活動,通過活動的方式為使用者傳送現金紅包,而這個紅包觸達的訊息是在公眾號聊天視窗頁面,這樣也可以引導使用者關注公眾號、提升活躍度等等。

開通現金紅包

官方文件如下:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_3&index=2
複製程式碼

在使用現金紅包之前,請前往開通現金紅包功能。
操作路徑:【登入微信支付商戶平臺——>產品中心——>現金紅包——>開通】。

可以根據官方的宣告來開通現金紅包,這裡說幾個重要的點:

  1. 入住時間超過90天;
  2. 連續交易正常交易時間30天;

一定要注意:上面這兩點是必要條件,很多新註冊的公司很容易就著了道,入住時間不夠、交易時間更不夠,沒搞明白,活活等了三個月時間;如果有小夥伴遇到這樣的情況,可以換一個滿足要求的主體公司來解決,我的github程式碼中也相容不同主體的服務號使用微信支付相關功能,小夥伴可以看看原始碼WXPayConstantsWXPay這兩個類,呼叫介面時擴充套件WXPayConfigImpl即可。

說明:在開通時請如實選擇你的使用場景,且在紅包的發放過程中如實上報你的場景,如有作假,微信支付將有權根據《微信支付商戶平臺使用協議》對你的商戶號做出處理。

開發前的準備

具體的操作步驟這裡就不描述了,小夥伴們可以檢視官方文件:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_3&index=2
複製程式碼

上面文件中已經有詳細的描述,我在這裡簡單描述一下重點注意項:

  1. 下載API證照
  2. 充值,保證商戶餘額有足夠的錢(一定要注意基本賬戶和運營賬戶的區別,一般情況下,有運營賬戶的時候,都會從運營賬戶中扣款)操作路徑:【登入商戶平臺——>交易中心——>資金管理——>充值】
  3. 獲取openid,指定使用者傳送紅包必須先知道使用者的標識openid,可以根據網頁授權介面獲得
  4. 設定紅包引數,操作路徑:【登入商戶平臺——>產品中心——>現金紅包——>產品設定】

對於第四點,可以設定和更改以下引數官方解釋如下:

  1. 呼叫IP地址:設定之後,僅有已設定的IP地址可以呼叫,其餘的IP呼叫會報錯;
  2. 使用者領取上限:限制同一openid同一日領取的個數;
  3. 防刷等級:防刷是指微信風控針對微信小號、殭屍號、機器號等的攔截,你可以通過更改防刷等級控制防刷的強度;
  4. 同時,你也可以申請更改紅包額度。但是需要經過微信支付的稽核,稽核通過之後才會生效;

敲黑板!!!重點來了,以上第一點IP地址,就是我們呼叫現金紅包發放的伺服器IP地址了;第二點也要注意,每個使用者可以領取的紅包個數限制;

最需要注意的是,呼叫介面時,發放紅包使用場景一定要慎重選擇,檢視一下每種場景對應的限制,比如在紅包金額大於200或者小於1元時必傳場景引數,這時就需要我們配置閥值。

發放方式(介面發放)

方式一:介面發放
商戶根據開發文件進行開發,一次呼叫可以給一個指定使用者傳送一個指定金額的紅包,滿足多元化的運營需求。

方式二:通過上傳openid檔案發放
收集要傳送紅包物件的openid,將openid編輯成txt檔案,登入微信支付商戶平臺,使用上傳檔案功能發放。一份檔案對應一個紅包模板,便於管理。

方式三:配置營銷規則“滿額送”發放
商戶可以在商戶平臺配置自助規則:使用者使用微信支付發生交易滿足一定條件,立送現金紅包

本文主要講通過介面發放的方式。

介面連結

https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack
複製程式碼

是否需要證照

呼叫介面

官方文件地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
複製程式碼

首先是發放規則:

  1. 傳送頻率限制——預設1800/min
  2. 傳送個數上限——按照預設1800/min算
  3. 金額限制——預設紅包金額為1-200元,如有需要,可前往商戶平臺進行設定和申請
  4. 其他其他限制嗎?——單個使用者可領取紅包上線為10個/天,如有需要,可前往商戶平臺進行設定和申請
  5. 如果量上滿足不了我們的需求,如何提高各個上限?——金額上限和使用者當天領取次數上限可以在商戶平臺進行設定

注意1-紅包金額大於200或者小於1元時,請求引數scene_id必傳。
注意2-根據監管要求,新申請商戶號使用現金紅包需要滿足兩個條件:1、入駐時間超過90天 2、連續正常交易30天。
注意3-移動應用的appid無法使用紅包介面。

PS:上面是官方介紹,不難理解,劃重點!!!(注意3的含義,就是隻能使用公眾號的openid,小程式的openid不可用。)

訊息觸達規則參考官方文件:

訊息觸達規則

下面開始來乾貨,貼出原始碼吧,應用程式碼:

/**
 * 傳送現金紅包
 *
 * @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", "活動名稱", "紅包祝福語", "備註", "127.0.0.1");
    System.out.println("wxPay.sendRedPack:" + resultMap);
}
複製程式碼

呼叫傳送現金紅包介面:

/**
 * 作用:企業向指定微信使用者的openid發放指定金額紅包<br>
 * 場景:商戶可以通過本平臺向微信支付使用者發放現金紅包。使用者領取紅包後,資金到達使用者微信支付零錢賬戶,和零錢包的其他資金有一樣的使用出口;若使用者未領取,資金將會在24小時後退回商戶的微信支付賬戶中。
 * 介面文件地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
 *
 * @param mch_billno       商戶訂單號
 * @param openid           使用者openid
 * @param amount           企業付款金額
 * @param act_name         活動名稱
 * @param wishing          紅包祝福語
 * @param remark           備註
 * @param spbill_create_ip 該IP可傳使用者端或者服務端的IP
 * @return API返回資料
 * @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 {

    /** 構造請求引數資料 **/
    Map<String, String> data = new HashMap<>();

    // 商戶訂單號	 mch_billno	是	10000098201411111234567890	String(28) 商戶訂單號(每個訂單號必須唯一。取值範圍:0~9,a~z,A~Z)介面根據商戶訂單號支援重入,如出現超時可再呼叫。
    data.put("mch_billno", mch_billno);
    // 商戶名稱	send_name	是	天虹百貨	String(32)	紅包傳送者名稱
    data.put("send_name", "悅店");
    // 使用者openid	re_openid	是	oxTWIuGaIt6gTKsQRLau2M0yL16E	String(32) 接受紅包的使用者openid openid為使用者在wxappid下的唯一標識(獲取openid參見微信公眾平臺開發者文件:網頁授權獲取使用者基本資訊)
    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()));
    // 紅包發放總人數	total_num	是	1	int 紅包發放總人數 total_num=1
    data.put("total_num", "1");
    // 紅包祝福語	wishing	是	感謝您參加猜燈謎活動,祝您元宵節快樂!	String(128)	紅包祝福語
    data.put("wishing", wishing);
    // Ip地址	client_ip	是	192.168.0.1	String(15)	呼叫介面的機器Ip地址
    data.put("client_ip", spbill_create_ip);
    // 活動名稱	act_name	是	猜燈謎搶紅包活動	String(32)	活動名稱
    data.put("act_name", act_name);
    // 備註	remark	是	猜越多得越多,快來搶!	String(256)	備註資訊
    data.put("remark", remark);

    /** 以下引數為非必填引數 **/
    /*
     * 場景id:scene_id	否	PRODUCT_8	String(32) 發放紅包使用場景,紅包金額大於200或者小於1元時必傳
     * PRODUCT_1:商品促銷
     * PRODUCT_2:抽獎
     * PRODUCT_3:虛擬物品兌獎
     * PRODUCT_4:企業內部福利
     * PRODUCT_5:渠道分潤
     * PRODUCT_6:保險回饋
     * PRODUCT_7:彩票派獎
     * PRODUCT_8:稅務刮獎
     */
    //data.put("scene_id", "PRODUCT_1");
    /*
     * 活動資訊	risk_info	否	posttime%3d123123412%26clientversion%3d234134%26mobile%3d122344545%26deviceid%3dIOS	String(128)
     * posttime:使用者操作的時間戳
     * mobile:業務系統賬號的手機號,國家程式碼-手機號。不需要+號
     * deviceid :mac 地址或者裝置唯一標識
     * clientversion :使用者操作的客戶端版本 把值為非空的資訊用key=value進行拼接,再進行urlencode urlencode(posttime=xx& mobile =xx&deviceid=xx)
     */
    // 資金授權商戶號	consume_mch_id	否	1222000096	String(32) 資金授權商戶號 服務商替特約商戶發放時使用

    /** 以下四個引數,在 this.redPackRequestData 方法中會自動賦值 **/
    // 商戶號	mch_id	是	10000098	String(32)	微信支付分配的商戶號
    // 隨機字串	nonce_str	是	5K8264ILTKCH16CQ2502SI8ZNMTM67VS	String(32)	隨機字串,不長於32位
    // 簽名	sign	是	C380BEC2BFD727A4B6845133519F3AD6	String(32)	詳見簽名生成演算法
    // 公眾賬號appid	wxappid	是	wx8888888888888888	String(32)	微信分配的公眾賬號ID(企業號corpid即為此appId)。在微信開放平臺(open.weixin.qq.com)申請的移動應用appid無法使用該介面。

    // 微信呼叫介面
    Map<String, String> resultMap = this.sendRedPack(data);

    WXPayUtil.getLogger().info("wxPay.sendRedPack:" + resultMap);

    return resultMap;
}
複製程式碼

以上為介面呼叫程式碼,對於介面呼叫的入參和出參,小夥伴看看官網文件哦,介面中的註釋給大家一個參考。

官方還提供了一種發放裂變紅包的介面,有需要的小夥伴可以瞭解一下,文件地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_5&index=4
複製程式碼

裂變紅包:一次可以發放一組紅包。首先領取的使用者為種子使用者,種子使用者領取一組紅包當中的一個,並可以通過社交分享將剩下的紅包給其他使用者。裂變紅包充分利用了人際傳播的優勢。

查詢紅包記錄

用於商戶對已發放的紅包進行查詢紅包的具體資訊,可支援普通紅包和裂變包。

這個介面很簡單,就是查詢已經傳送的紅包記錄,根據商戶發放紅包的商戶訂單號查詢即可。

介面連結

https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo
複製程式碼

是否需要證照

呼叫介面

應用程式碼:

/**
 * 查詢現金紅包
 *
 * @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>
 * 場景:用於商戶對已發放的紅包進行查詢紅包的具體資訊,可支援普通紅包和裂變包。
 * 介面文件地址:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_6&index=5
 *
 * @param mch_billno 商戶訂單號
 * @return API返回資料
 * @throws Exception e
 */
public Map<String, String> getHbInfo(String mch_billno) throws Exception {

    /** 構造請求引數資料 **/
    Map<String, String> data = new HashMap<>();

    // 商戶訂單號	 mch_billno	是	10000098201411111234567890	String(28) 商戶訂單號(每個訂單號必須唯一。取值範圍:0~9,a~z,A~Z)介面根據商戶訂單號支援重入,如出現超時可再呼叫。
    data.put("mch_billno", mch_billno);
    // 訂單型別	bill_type	是	MCHT	String(32)	MCHT:通過商戶訂單號獲取紅包資訊。
    data.put("bill_type", "MCHT");

    /** 以下四個引數,在 this.fillRequestData 方法中會自動賦值 **/
    // 商戶號	mch_id	是	10000098	String(32)	微信支付分配的商戶號
    // 隨機字串	nonce_str	是	5K8264ILTKCH16CQ2502SI8ZNMTM67VS	String(32)	隨機字串,不長於32位
    // 簽名	sign	是	C380BEC2BFD727A4B6845133519F3AD6	String(32)	詳見簽名生成演算法
    // 公眾賬號appid	appid	是	wx8888888888888888	String(32)	微信分配的公眾賬號ID(企業號corpid即為此appId)。在微信開放平臺(open.weixin.qq.com)申請的移動應用appid無法使用該介面。

    // 微信呼叫介面
    Map<String, String> resultMap = this.getHbInfo(data);

    WXPayUtil.getLogger().info("wxPay.getHbInfo:" + resultMap);

    return resultMap;
}
複製程式碼

此介面通過商戶訂單號獲取紅包資訊,很簡單,對於返回引數小夥伴們可以檢視官方文件,注意一下錯誤程式碼即可。

結語

以上為商戶平臺開通現金紅包、指定使用者發放、紅包記錄查詢相關的解釋和原始碼,小夥伴們一定要注意看看官方文件哦,具體的原始碼可以看作者的github,裡面對每個方法有詳細的註釋。

如果小夥伴有遇到解決不了的問題,可以關注作者微信公眾號,加入討論群中發出疑問,和小夥伴們一起解決哦~

預告:下一篇文章會講發放獎勵的另一種方式 商戶平臺代金券或立減優惠開通、指定使用者發放、查詢等,敬請期待!!!

​如果想要提前一覽原始碼的小夥伴,可以先看看我的 github,地址如下:

​https://github.com/YClimb/wxpay-sdk/blob/master/README.md ​

關注作者微信公眾號,點選下方討論群,掃碼即可加入微信支付討論群與小夥伴一起探討哦~

到此本文就結束了,關注公眾號檢視更多推送!!!


關注我的公眾號

相關文章