微信服务号+支付+php,微信服务号发送营销红包给关注用户步骤及部分php代码

999ea652be59c58af039fb7c0fc2c825.png

微信红包

一、前言:

这里主要讲述的是微信服务号给关注用户发送微信红包的相关内容;主要使用的业务场景有:1、业务员匆匆销员的奖励;2、现场会议互动抽奖;3、微信推广转发奖励;4、其他等等等,大开脑洞想把.

二、系统业务流程:

发放红包的大致流程:1、用户关注公众号;2、验证并绑定用户,主要是后台系统录入用户姓名手机号等信息,在微信公众号中根据手机短信验证码将用户的openid与后台系统的用户信息绑定;3、用户上传相关凭证;4、后台人工审核;5、发送红包;6、查询发送成果.

以上是大致的流程,但对于不同的业务场景可能有些步骤可以省略或者必要增加步骤;以上主要是针对促销员奖励功能的实际应用步骤.

三、微信红包功能开发步调:

1、申请认证服务号,然后申请微信支付功能:

52fb197c95180af7bd5b1961d101e4b4.png

微信红包功能位置

2、点击产物设置,设置微信红包的参数:

3691215c05c858d515463252cb7a27df.png

设置微信红包的参数

3、点击开发文档,查看微信红包的相关开发文档,进行开发:

12cecdaad5c0c908c9b25b2969445d3a.png

开发文档

四、PHP实现单个红包发送的部门代码:

//微信服务号单个红包发送的功能实现,使用了CI框架,数据库是mysql

//数据表wx_hongbao中存放的是红包待发送队列

protected function _sendsinglehongbao($fid)//$fid是发送队列表wx_hongbao的主键

{

//防止重新发放,只要有状态成果都不再发送,openid不正确的也跳过

$row=$this->db->query("select * from wx_hongbao where fid='".$fid."' and LENGTH(fopenid)>10")->row_array();

if($row['fid']=='')

{

return 'checkerror:红包记录无或红包信息不完整或openid差错';

}

else

{

if($row['fsendresult']!==NULL&&$row['fsendresult']!=='')

return 'checkerror:不克不及重复发送红包';

else

{

$fopenid=$row['fopenid'];

$famt=$row['famt']*100;

$fmemo=$row['fhongbaoname'].'-'.$row['fhongbaomemo'];

}

}

if($famt>20000)

return 'checkerror:单个红包金额不克不及超过200元';

//检查余额限制,wx_balance表中可以扩充类型进行控制,好比对每个用户进行余额限制

$row=$this->db->query("select fbalanceamt from wx_balance")->row_array();

$fbalanceamt=$row['fbalanceamt'];

if(is_numeric($fdeptamt))

{

if($fbalanceamt

return 'checkerror:余额不敷';

}

else

return 'checkerror:余额异常';

//检查当天用户接收红包个数,跨越10个则终止发送

$today=date("Y-m-d");

$starttime=strtotime($today);

$endtime=strtotime($today.' 23:59:59');

$row=$this->db->query("select count(fid) as fcount from wx_hongbao where fopenid='".$fopenid

."' and fsendresult!='返回失败' and fsendtime>".$starttime." and fsendtimerow_array();

$fcount=$row['fcount'];

if($fcount>=10)

{

return 'checkerror:用户当天接收红包超10个';

}

//微信红包api调用发红包

$MCHID='xxxxxxxxxx';//微信支付商户号

$KEY='1ADxxxxxxxxxxxxxxxxxx75C';//本身在微信支付商户后台设置的API密钥

$mch_billno=$MCHID.date("Ymd").substr('000000000'.$fid,-10);//生成订单号

$url='https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';//现金红包哀求地址

$data = array(

'nonce_str' => $this->createNonceStr(),

'mch_billno' =>$mch_billno, //订单号

'mch_id' => $MCHID,

'wxappid' => $this->wx_config['appid'],

'send_name' => 'xxxx',

're_openid' => $fopenid,

'total_amount' => $famt,

'total_num' => 1, //发放送人数

'wishing' => $fmemo, //祝福语

'client_ip' => '61.xxx.xxx.xxx', //调用服务器ip

'act_name' => '员工奖励', //活动名称

'remark' => 'xxxx员工奖励!', //备注

'scene_id' => 'PRODUCT_4', //发放红包使用场景,红包金额大于200时必传

);

//提前更新,防止网络差错造成没有返回信息

$this->db->query("update wx_hongbao set fsendtime=".time().",mch_billno='".$mch_billno."' where fid= ".$fid);

$data['sign'] = $this->sign($data,$KEY);

$result = $this->curl_post_ssl($url, $this->toxml($data));//哀求发送红包

//保留接收到微信回复消息,用于异常问题排查

$filename='sendhongbao'.date ('Ymdh', time () ).'.txt';

$filePath = getcwd()."/uploadfiles/weixinmsg/".$filename;

$myfile = fopen($filePath, "a+") or die("Unable to open file!");

fwrite($myfile, $result."\r\n\r\n");

fclose($myfile);

//处理微信支付返回成果

$result = $this->fromxml($result);

if(!empty($result) && $result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS')

{

$data = array(

'return_msg'=> $result['return_msg'].'_初始状态:发送胜利',

'send_listid' => $result['send_listid'],

'fsendopenid' => $result['re_openid'],

'fsendresult'=>'发送胜利'

);

$this->db->update('wx_hongbao', $data, "fid = ".$fid." and (fsendresult='' or fsendresult is null)");

$data = array(

'fhongbaoid' => $fid,

'famt' => ($famt/100),

'fsendtime' => time(),

'fmemo'=>wxmsg:'.$result['return_msg'].',wxmcno:'.$result['mch_billno']

);

$this->db->insert('wx_log', $data);

return 'success';

}

else

{

$return_msg='失败';

if(strstr($result['return_msg'],"请稍后使用原单号查询发放结果"))//此种情况是微信没有返回结果,但往往发送胜利

$return_msg='稍后查询成果';

$data = array(

'return_msg'=> $result['return_msg'].'_初始状态:'.$return_msg,

'send_listid' => $result['send_listid'],

'fsendopenid' => $result['re_openid'],

'fsendresult'=>$return_msg

);

$this->db->update('wx_hongbao', $data, "fid = ".$fid." and (fsendresult='' or fsendresult is null)");

return 'error:红包发送返回失败';

}

}

备注:对于更多代码功能欢迎交流学习,个人实际应用的项目是实现了匆匆销员的奖励.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值