话说上一篇咱们讲了“企业付款到零钱”的实现方案(传送门),有人确定要说,直接打款是否是太不友好了,过个年节的你公司就不能给每人发个红包啥的么?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元的直播费了。
(完)