本文是【淺析微信支付】系列文章的第十三篇,主要講解在如何開通商戶平臺的紅包功能和爲用戶發放紅包,以及查詢發送紅包記錄。php
淺析微信支付系列已經更新十三篇了喲~,沒有看過的朋友們能夠看一下哦。git
淺析微信支付:(餘額提現)企業付款到微信用戶零錢或銀行卡帳戶github
上一篇文章咱們說到,若是有餘額提現
、返利福利
等需求時,就會用到商家向用戶付款的操做,基於微信支付,上篇咱們說了付款到用戶餘額和銀行卡;本文來說解如何使用現金紅包的方式向用戶發送現金紅包
,首先咱們來了解什麼是微信的現金紅包。服務器
現金紅包,是微信支付商戶平臺提供的營銷工具之一,上線以來深受廣大商戶與用戶的喜好。商戶能夠經過本平臺向微信支付用戶發放現金紅包。用戶領取紅包後,資金到達用戶微信支付零錢帳戶,和零錢包的其餘資金有同樣的使用出口;微信
注意:若用戶未領取,資金將會在24小時後退回商戶的微信支付帳戶中。app
官方文檔地址:微信公衆平臺
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
在使用現金紅包以前,請前往開通現金紅包功能。 操做路徑:【登陸微信支付商戶平臺——>產品中心——>現金紅包——>開通】。
能夠根據官方的聲明來開通現金紅包,這裏說幾個重要的點:
必定要注意:上面這兩點是必要條件,不少新註冊的公司很容易就着了道,入住時間不夠、交易時間更不夠,沒搞明白,活活等了三個月時間;若是有小夥伴遇到這樣的狀況,能夠換一個知足要求的主體公司來解決,個人github代碼中也兼容不一樣主體的服務號使用微信支付相關功能,小夥伴能夠看看源碼WXPayConstants
和WXPay
這兩個類,調用接口時擴展WXPayConfigImpl
便可。
說明:在開通時請如實選擇你的使用場景,且在紅包的發放過程當中如實上報你的場景,若有做假,微信支付將有權根據《微信支付商戶平臺使用協議》對你的商戶號作出處理。
具體的操做步驟這裏就不描述了,小夥伴們能夠查看官方文檔:
https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_3&index=2
上面文檔中已經有詳細的描述,我在這裏簡單描述一下重點注意項:
對於第四點,能夠設置和更改如下參數官方解釋以下:
敲黑板!!!重點來了,以上第一點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-紅包金額大於200或者小於1元時,請求參數scene_id必傳。 注意2-根據監管要求,新申請商戶號使用現金紅包須要知足兩個條件:一、入駐時間超過90天 二、連續正常交易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
關注做者公衆號,點擊下方討論羣
,掃碼便可加入微信支付討論羣
與小夥伴一塊兒探討哦~
到此本文就結束了,關注公衆號查看更多推送!!!