話說上一篇咱們講了「企業付款到零錢」的實現方案(傳送門),有人確定要說,直接打款是否是太不友好了,過個年節的你公司就不能給每人發個紅包啥的麼?php
放心好啦,微信支付一樣提供了發紅包的接口,如今北哥就給你講講如何將發紅包的功能歸入到我大Yii2旗下。html
先說下本文會涉及的知識點web
這個發紅包功能初期被不少三級分銷和微商系統使用,如今被禁止的很厲害,不過若是利用好了,對於公衆號的推廣仍是至關至關的。segmentfault
另外這也一個須要開通的功能😟😟😟,進入到微信支付平臺。api
對於經過此模塊產生的紅包,均會經過此商戶關聯的公衆號推送給客戶。安全
你問:可是若是我沒有關注公衆帳號那?微信
我答:那你同樣能夠收到,不過不是公衆號推送的,而是微信本身的服務通知推送的,反正關不關注錢💰都收到了。給你看看流程圖yii2
下面的情景均爲已關注公衆號後的收紅包狀況。app
微信支付的發紅包功能也分爲支付後臺直接發放和經過接口方法,這裏講接口方法。(直接發放傳送門)微信公衆平臺
和企業付款到零錢同樣,發紅包也是一個商戶將本身餘額的錢拿出來,所以在配置上不少雷同。
一樣須要配置3個參數和2個證書文件。
這些配置和企業付款到零錢如出一轍~~~~
微信接口發紅包有兩種
爲避免重複造輪子,在本文咱們依然使用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 app\controllers;
use yii\web\Controller;
use EasyWeChat\Foundation\Application;
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 app\controllers;
use yii\web\Controller;
use EasyWeChat\Foundation\Application;
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元的直播費了。
(完)