“親,來一個”使用Yii2實現微信發紅包解決方法 – EasyWechat版本

阿北哥ya發表於2019-02-25

話說上一篇我們講了“企業付款到零錢”的實現方案(傳送門),有人肯定要說,直接打款是不是太不友好了,過個年節的你公司就不能給每人發個紅包啥的麼?

放心好啦,微信支付同樣提供了發紅包的介面,現在北哥就給你講講如何將發紅包的功能納入到我大Yii2旗下。

先說下本文會涉及的知識點

  • Yii2 Framework
  • EasyWeChat
  • 微信紅包介面

這個發紅包功能初期被很多三級分銷和微商系統使用,現在被禁止的很厲害,不過如果利用好了,對於公眾號的推廣還是相當相當的。

另外這也一個需要開通的功能???,進入到微信支付平臺。

“親,來一個”使用Yii2實現微信發紅包解決方法 – EasyWechat版本
先開通

對於通過此模組產生的紅包,均會通過此商戶關聯的公眾號推送給客戶。

一個疑問

你問:但是如果我沒有關注公眾賬號那?

我答:那你一樣可以收到,不過不是公眾號推送的,而是微信自己的服務通知推送的,反正關不關注錢?都收到了。給你看看流程圖

“親,來一個”使用Yii2實現微信發紅包解決方法 – 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發一個固定金額的紅包,先看效果圖吧。

“親,來一個”使用Yii2實現微信發紅包解決方法 – EasyWechat版本
發普通紅包

// 發紅包的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個紅包發給他的朋友。

“親,來一個”使用Yii2實現微信發紅包解決方法 – EasyWechat版本
聚變紅包

你看到了,圖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元的直播費了。

地址 segmentfault.com/l/150000000…

(完)

相關文章