最近接了个项目,其中有需求是要实现摇一摇红包功能,在网上搜了好久,都没有找到源码,没办法,只有自动写了,下面小编把我的劳动成果分享给大家供大家参考,本文写的不好,还请各位大侠提出宝贵意见,共同学习进步。
微信官方说明如下
摇一摇红包说明
功能说明
摇一摇周边红包接口是为线下商户提供的发红包功能。用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包,在线上转发分享无效。
开发者可通过接口开发摇一摇红包功能,特点包括:
1.可选择使用模板加载页或自定义Html5页面调起微信原生红包页面(详见创建红包活动中use_template字段,1为使用模板,2为使用自定义Html5页面)
2.原生红包页面拆红包,无需通过公众号消息下发
3.提供关注公众号能力,用户可自行选择是否关注(裂变红包分享时无效)
4.完成页面可配置跳转链接,可跳转商户的其他自定义Html5页面
5.同一个用户在单个红包活动中只能领取1次红包
用户侧交互流程
红包组件接口调用流程
1. 申请红包接口权限:登录摇一摇周边商户后台https://zb.weixin.qq.com ,进入开发者支持,申请开通摇一摇红包组件接口;
2. 红包预下单:调用微信支付的api进行红包预下单,告知需要发放的红包金额,人数,生成红包ticket;
3. 创建活动并录入红包信息:调用摇周边平台的api录入创建红包活动并录入信息,传入预下单时生成的红包ticket;
4. 调用jsapi抽红包:在摇出的页面中通过调用jsapi抽红包,抽中红包的用户可以拆红包;
5. 调用以上接口时,红包提供商户和红包发放商户公众号要求一致。
说明:
红包提供商户:红包预下单接口传入的参数wxappid所代表的商户
红包发放商户:调用红包接口创建红包活动、录入红包信息、发放红包的商户公众号所以步骤应该是 ① 创建红包活动 ② 预下单 ③ 录入红包找出来了之前整理的类 在写一下1.创建活动
接口说明
创建红包活动,设置红包活动有效期,红包活动开关等基本信息,返回活动id
接口调用说明
服务器端调用
http请求方式: POST
URL:
请求参数说明
请求示例
Content-Type: application/json Post Body: { "title": "title", "desc": "desc", "onoff": 1, "begin_time": 1428854400, "expire_time": 1428940800, "sponsor_appid": "wxxxxxxxxxxxxxx", "total": 10, "jump_url": JUMP_URL, "key": "keyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" }
返回数据说明
示例
{ "errcode":0, "errmsg":"", "lottery_id":"xxxxxxllllll", "page_id":1, } /** * 摇一摇红包 创建活动 * @author jiosen */ class addlotteryinfo_pub extends Wxpay_client_pub { var $code;//code码,用以获取openid var $openid;//用户的openid function __construct($access_token,$logo) { //设置接口链接 $this->url = "https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=".$access_token."&use_template=1&logo_url=".$logo; //设置curl超时时间 $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /** * 生成接口参数 json */ function createJson() { try { //检测必填参数 if($this->parameters["title"] == null) { throw new SDKRuntimeException("缺少抽奖活动名称title!"."<br>"); }elseif ($this->parameters["desc"] == null ) { throw new SDKRuntimeException("缺少抽奖活动描述desc!"."<br>"); }elseif ($this->parameters["begin_time"] == null) { throw new SDKRuntimeException("缺少活动开始时间 begin_time!"."<br>"); }elseif ($this->parameters["expire_time"] == null) { throw new SDKRuntimeException("缺少活动结束时间 expire_time!"."<br>"); }elseif ($this->parameters["total"] == null) { throw new SDKRuntimeException("缺少红包总数total!"."<br>"); }elseif ($this->parameters["jump_url"] == null) { throw new SDKRuntimeException("缺少红包关注跳转连接jump_url!"."<br>"); }elseif ($this->parameters["key"] == null) { throw new SDKRuntimeException("缺少红包key!"."<br>"); } $this->parameters["title"] = urlencode($this->parameters["title"]); $this->parameters["desc"] = urlencode($this->parameters["desc"]); $this->parameters["onoff"] = '1';//开启活动 $this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//公众账号ID //var_dump($this->parameters); //echo json_encode($this->parameters); return json_encode($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } function hbpreorder() { $data = $this->createJson(); $result = $this->curl_post($this->url,urldecode($data)); $result = json_decode($result); return $result; } function curl_post($url,$data) { $curl = curl_init($url); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POST, 1);//发送一个常规的Post请求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的数据包 $rv = curl_exec($curl);//输出内容 curl_close($curl); return $rv; } /** * 作用:生成可以获得code的url */ function createOauthUrlForCode($redirectUrl) { $urlObj["appid"] = WxPayConf_pub::APPID; $urlObj["redirect_uri"] = "$redirectUrl"; $urlObj["response_type"] = "code"; $urlObj["scope"] = "snsapi_base"; $urlObj["state"] = "STATE"."#wechat_redirect"; $bizString = $this->formatBizQueryParaMap($urlObj, false); return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; } /** * 作用:生成可以获得openid的url */ function createOauthUrlForOpenid() { $urlObj["appid"] = WxPayConf_pub::APPID; $urlObj["secret"] = WxPayConf_pub::APPSECRET; $urlObj["code"] = $this->code; $urlObj["grant_type"] = "authorization_code"; $bizString = $this->formatBizQueryParaMap($urlObj, false); return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; } /** * 作用:通过curl向微信提交code,以获取openid */ function getOpenid() { $url = $this->createOauthUrlForOpenid(); //初始化curl $ch = curl_init(); //设置超时 curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //运行curl,结果以jason形式返回 $res = curl_exec($ch); curl_close($ch); $data = json_decode($res,true); $this->openid = $data['openid']; return $this->openid; } /** * 作用:设置code */ function setCode($code_) { $this->code = $code_; } }
要注意提交的数据是json 不是xml
前端页面随便做一下
php 代码