話說上一篇我們講了“企業付款到零錢”的實現方案(傳送門),有人肯定要說,直接打款是不是太不友好了,過個年節的你公司就不能給每人發個紅包啥的麼?
放心好啦,微信支付同樣提供了發紅包的介面,現在北哥就給你講講如何將發紅包的功能納入到我大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 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元的直播費了。
(完)