話說上一篇我們講了“企業付款到零錢”的實現方案(傳送門),有人肯定要說,直接打款是不是太不友好了,過個年節的你公司就不能給每人發個紅包啥的麼?
放心好啦,微信支付同樣提供了發紅包的介面,現在北哥就給你講講如何將發紅包的功能納入到我大Yii2旗下。
先說下本文會涉及的知識點
- Yii2 Framework
- EasyWeChat
- 微信紅包介面
這個發紅包功能初期被很多三級分銷和微商系統使用,現在被禁止的很厲害,不過如果利用好了,對於公眾號的推廣還是相當相當的。
另外這也一個需要開通的功能???,進入到微信支付平臺。
對於通過此模組產生的紅包,均會通過此商戶關聯的公眾號推送給客戶。
一個疑問
你問:但是如果我沒有關注公眾賬號那?
我答:那你一樣可以收到,不過不是公眾號推送的,而是微信自己的服務通知推送的,反正關不關注錢?都收到了。給你看看流程圖
下面的情景均為已關注公眾號後的收紅包情況。
準備工作
微信支付的發紅包功能也分為支付後臺直接發放和通過介面方法,這裡講介面方法。(直接發放傳送門)
和企業付款到零錢一樣,發紅包也是一個商戶將自己餘額的錢拿出來,因此在配置上很多雷同。
同樣需要配置3個引數和2個證照檔案。
- appId & mchid & key (引數可以在公眾號後臺找到)
- cert & key 證照 (微信支付平臺 ➭ 賬戶中心 ➭ API安全 ➭ 下載證照)
- 商戶餘額必須有錢
這些配置和企業付款到零錢一模一樣~~~~
開始編碼
微信介面發紅包有兩種
- 普通紅包
- 裂變紅包
為避免重複造輪子,在本文我們依然使用EasyWeChat來實現它們。
無論是什麼形式的紅包,配置引數是必須要的,和企業付款到零錢一樣。我們配置yii2的 config/web.php
// 配置檔案conf/params.php
return [
`WECHAT`=>[
/**
* Debug 模式,bool 值:true/false
*
* 當值為 false 時,所有的日誌都不會記錄
*/
`debug` => true,
/**
* 賬號基本資訊,請從微信公眾平臺/開放平臺獲取
*/
`app_id` => `必須要`, // AppID
`secret` => `不是必須的`, // AppSecret
`token` => `不是必須的`, // Token
`aes_key` => ``,
...
`payment` => [
`merchant_id` => `必須要`,
`key` => `必須要`,
`cert_path` => `path/to/your/cert.pem`//必須
`key_path` => `path/to/your/key`//必須
],
],
];複製程式碼
發普通紅包
這個比較簡單,就是直接給一個openid發一個固定金額的紅包,先看效果圖吧。
// 發紅包的action
namesapce appcontrollers;
use yiiwebController;
use EasyWeChatFoundationApplication;
use Yii;
class UserController extends Controller {
public function actionRed($id,$money)){
$user = User::findOne($id);
// 配置支付引數
$conf = Yii::$app->params[`WECHAT`];
$wxApp = new Application($config);
$luckyMoney = $wxApp->lucky_money;
$luckyMoneyData = [
`mch_billno` => str_random(16),
`send_name` => `紅包傳送者名稱`,
`re_openid` => $user->open_id,
`total_num` => 1, //固定為1,可不傳
`total_amount` => $money*100, //單位為分,不小於100
`wishing` => `祝福語`,
`act_name` => `活動名稱`,
`remark` => $remark,
];
$result = $luckyMoney->sendNormal($luckyMoneyData);
}
}複製程式碼
這樣微信就將紅包發了指定openId的會員。
發裂變紅包
就是說我先將一組紅包(N個)發給了小明,然後小明領取一個,並且他有權利將剩餘的N-1個紅包發給他的朋友。
你看到了,圖1的人收到後可以轉發給好友,他的朋友圖2收到紅包領取後,但是圖2並沒有轉發好友的功能,所以叫裂變,否則就是聚變了。
看看程式碼實現
// 發紅包的action
namesapce appcontrollers;
use yiiwebController;
use EasyWeChatFoundationApplication;
use Yii;
class UserController extends Controller {
public function actionRed($id,$money)){
$user = User::findOne($id);
// 配置支付引數
$conf = Yii::$app->params[`WECHAT`];
$wxApp = new Application($config);
$luckyMoney = $wxApp->lucky_money;
$luckyMoneyData = [
`mch_billno` => str_random(16),
`send_name` => `紅包傳送者名稱`,
`re_openid` => $user->open_id,
`total_num` => 3,
`total_amount` => $money*100, //單位為分,不小於300
`wishing` => `祝福語`,
`act_name` => `活動名稱`,
`remark` => $remark,
`amt_type` => `ALL_RAND`, //可不傳
];
$result = $luckyMoney->sendGroup($luckyMoneyData);
}
}複製程式碼
總結下
上面就是通過微信支付的介面來發紅包,當然這也有很多限制,比如每天的限額,包括上面的程式碼我只寫了必填項,還有哪些元素的,望諸君自行檢視文件,欄位都是一樣的。
另外就是紅包結果返回和查詢紅包記錄的實現也相對比較簡單,不再重複,本文目的是順出發紅包的流程以及一些關鍵點的預防(比如沒有關注公眾號怎麼辦,比如什麼是裂變等)
介面發紅包官方介面連線:pay.weixin.qq.com/wiki/doc/ap…
還有一個好訊息,北哥在segmentfault上下週二(6月27)有直播,主講yii2和微信支付,掘金社群初來駕到,特給我們社群留10個免費碼,對yii2整合微信支付不太明白的兄弟可以用下,就不用10.24元的直播費了。
(完)