「親,來一個」使用Yii2實現微信發紅包解決方法 - EasyWechat版本

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

放心好啦,微信支付一樣提供了發紅包的接口,如今北哥就給你講講如何將發紅包的功能歸入到我大Yii2旗下。html

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

  • Yii2 Framework
  • EasyWeChat
  • 微信紅包接口

這個發紅包功能初期被不少三級分銷和微商系統使用,如今被禁止的很厲害,不過若是利用好了,對於公衆號的推廣仍是至關至關的。segmentfault

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

先開通

對於經過此模塊產生的紅包,均會經過此商戶關聯的公衆號推送給客戶。安全

一個疑問

你問:可是若是我沒有關注公衆帳號那?微信

我答:那你同樣能夠收到,不過不是公衆號推送的,而是微信本身的服務通知推送的,反正關不關注錢💰都收到了。給你看看流程圖yii2

沒有關注對應公衆號收紅包流程

下面的情景均爲已關注公衆號後的收紅包狀況。app

準備工做

微信支付的發紅包功能也分爲支付後臺直接發放和經過接口方法,這裏講接口方法。(直接發放傳送門微信公衆平臺

企業付款到零錢同樣,發紅包也是一個商戶將本身餘額的錢拿出來,所以在配置上不少雷同。

一樣須要配置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元的直播費了。

地址 segmentfault.com/l/150000000…

(完)

相關文章
相關標籤/搜索