早上老大扔了个设备来说要做个摇一摇红包  就上网找了下 强大的度娘都找不到大神们分享出来的源码 只能自己埋头去写写了

微信官方说明如下

摇一摇红包说明

功能说明

摇一摇周边红包接口是为线下商户提供的发红包功能。用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包,在线上转发分享无效。

开发者可通过接口开发摇一摇红包功能,特点包括:

  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: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=LOGO_URL

请求参数说明

参数 类型 说明
access_token string accesstoken,以参数的形式拼装在url后
use_template int 是否使用模板,1:使用,2:不使用,以参数的形式拼装在url后。(模版即交互流程图中的红包加载页,使用模板用户不需要点击可自动打开红包;不使用模版需自行开发HTML5页面,并在页面调用红包jsapi)
logo_url string 使用模板页面的logo_url,不使用模板时可不加。展示在摇一摇界面的消息图标。图片尺寸为120x120。

POST BODY:JSON格式的结构体

参数 类型 说明
title string 抽奖活动名称(选择使用模板时,也作为摇一摇消息主标题),最长6个汉字,12个英文字母。
desc string 抽奖活动描述(选择使用模板时,也作为摇一摇消息副标题),最长7个汉字,14个英文字母。
onoff int 抽奖开关。0关闭,1开启,默认为1
begin_time long 抽奖活动开始时间,unix时间戳,单位秒
expire_time long 抽奖活动结束时间,unix时间戳,单位秒,红包活动有效期最长为91天
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
total long 红包总数,红包总数是录入红包ticket总数的上限,因此红包总数应该大于等于预下单时红包ticket总数。
jump_url string 红包关注界面后可以跳转到第三方自定义的页面
key string 开发者自定义的key,用来生成活动抽奖接口的签名参数,长度32位。使用方式见sign生成规则

请求示例

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 int 错误码。0为成功,其他为失败。详细请参考错误码表
errmsg string 错误信息
lottery_id string 生成的红包活动id
page_id int 生成的模板页面ID

示例

{     "errcode":0,     "errmsg":"",     "lottery_id":"xxxxxxllllll", "page_id":1,
}
 
/*** 摇一摇红包 创建活动* @author jiosen*/
class addlotteryinfo_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __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 代码

                     $title = $_POST['title'];$file = $_FILES['img'];$tools = new Tools(); //这是一个文件上传类 随意选择一样你喜欢的上传方式$logo_url = $tools->_upload_award("poll_img", $file, time()); $description = $_POST['description'];$total = $_POST['total'];$jump_url = $_POST['jump_url'];$token = getAccessToken();   //这里是我封装的一个获取 token的 方法  做了时间限制 防止超出调用次数$Redpack = new addlotteryinfo_pub($token,SITE_URL.$logo_url);$time = time();$end = time()+60*24*60*60;//两个月  这里的开始和结束时间我固定了 $key = $Redpack->createNoncestr(); //key$Redpack->setParameter('title', $title);//活动标题$Redpack->setParameter('desc', $description);//活动描述$Redpack->setParameter('begin_time', $time);//开始时间$Redpack->setParameter('expire_time', $end); //结束时间$Redpack->setParameter('total', $total);//红包总数$Redpack->setParameter('jump_url', $jump_url);//key$Redpack->setParameter('key', $key);$result = $Redpack->hbpreorder();$result = (array)$result; if($result['errcode']==0){$lottery_id = $result['lottery_id'];$page_id = $result['page_id'];//这里记得存一下数据库;

            

            }else{//echo '创建活动失败:'.$result['errmsg'];//这里是错误提示}

2.预下单

接口说明

设置单个红包的金额,类型等,生成红包信息。预下单完成后,需要在72小时内调用jsapi完成抽红包的操作。(红包过期失效后,资金会退回到商户财付通帐号。)

接口调用说明

服务器端调用
http请求方式: POST
https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder
POST数据格式:XML
需要商户证书

请求参数说明

参数 字段 是否必须 示例值 类型 说明
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8Z

NMTM67VS

String(32) 随机字符串,不长于32位
签名 sign C380BEC2BFD727A4B68451335

19F3AD6

String(32) 生成签名方式查看签名算法
商户订单号 mch_billno 10000098201411111234567890 String(28) 商户订单号(每个订单号必须唯一)组成: mch_id+yyyymmdd+10位一天内不能重复的数字。接口根据商户订单号支持重入, 如出现超时可再调用。
商户号 mch_id 10000098 String(32) 红包提供者的商户号(微信支付分配的商户号)
公众账号appid wxappid wx8888888888888888 String(32) 红包提供者公众号的appid,对应头像展示在红包页面
商户名称 send_name 天虹百货 String(32) 红包提供者名称,展示在红包页面
红包类型 hb_type NORMAL String(16) NORMAL-普通红包;GROUP-裂变红包(可分享红包给好友,无关注公众号能力)。
总金额 total_amount 1000 int 总付款金额,单位分
红包发放总人数 total_num 1 int 红包发放总人数,即总共有多少人可以领到该组红包(包括分享者)。普通红包填1,裂变红包必须大于1。
红包金额设置方式 amt_type ALL_RAND String(32) 红包金额设置方式,只对裂变红包生效。ALL_RAND—全部随机
红包祝福语 wishing 感谢您参加猜灯谜活动,祝您元宵节快乐 String(16) 红包祝福语,展示在红包页面
活动名称 act_name 猜灯谜抢红包活动 String(32) 活动名称,在不支持原生红包的微信版本中展示在红包消息
备注 remark 猜越多得越多,快来抢! String(32) 备注信息,在不支持原生红包的微信版本中展示在红包消息
授权商户号 auth_mchid 1000052601 String(32) 用于发红包时微信支付识别摇周边红包,所有开发者统一填写摇周边平台的商户号:1000052601
授权商户APPID auth_appid wxbf42bd79c4391863 String(32) 用于发红包时微信支付识别摇周边红包,所有开发者统一填写摇周边平台的appid:wxbf42bd79c4391863
风控设置 risk_cntl NORMAL String(32) 用于管控接口风险。具体值如下:NORMAL—正常情况;IGN_FREQ_LMT—忽略防刷限制,强制发放;IGN_DAY_LMT—忽略单用户日限额 限制,强制发放;IGN_FREQ_DAY_LMT—忽略防刷和单用户日限额限制,强制发放;如无特殊要求,请设为NORMAL。若忽略某项风险控制,可 能造成资金损失,请谨慎使用。

请求示例

<xml>
<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>
<mch_id><![CDATA[10000097]]></mch_id>
<wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>
<send_name><![CDATA[send_name]]></send_name>
<hb_type><![CDATA[NORMAL]]></hb_type>
<auth_mchid><![CDATA[10000098]]></auth_mchid>
<auth_appid><![CDATA[wx7777777]]></auth_appid>
<total_amount><![CDATA[200]]></total_amount>
<amt_type><![CDATA[ALL_RAND]]></amt_type>
<total_num><![CDATA[3]]></total_num>
<wishing><![CDATA[恭喜发财 ]]></wishing>
<act_name><![CDATA[ 新年红包 ]]></act_name>
<remark><![CDATA[新年红包 ]]></remark>
<risk_cntl><![CDATA[NORMAL]]></risk_cntl>
<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>
</xml>

返回数据说明

返回格式为xml

参数 字段 是否必须 示例值 类型 说明
返回状态码 return_code SUCCESS String(16) SUCCESS/FAIL;此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
返回信息 return_msg 签名失败 String(128) 返回信息,如非空,为错误原因 签名失败 参数格式校验错误

以下字段在return_code为SUCCESS的时候有返回

参数 字段 是否必须 示例值 类型 说明
签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 生成签名方式查看 签名算法
业务结果 result_code SUCCESS String(16) SUCCESS/FAIL
错误代码 err_code SUCCESS String(32) 错误码信息
错误代码描述 err_code_des 系统错误 String(128) 结果信息描述

以下字段在return_code 和result_code都为SUCCESS的时候有返回

参数 字段 是否必须 示例值 类型 说明
商户订单号 mch_billno 10000098201411111234567890 String(28) 商户订单号(每个订单号必须唯一)组成: mch_id+yyyymmdd+10位一天内不能重复的数字。
商户号 mch_id 10000098 String(32) 微信支付分配的商户号
公众账号appid wxappid wx8888888888888888 String(32) 商户appid
总金额 total_amount 1000 int 总付款金额,单位分
ticket sp_ticket 2J6MtR+SlbZ8Ga4EDi64X5

vC4Xv01ofX4uWOqqTc9kGJYhkq5 st5ucrXKxkjnC/UuvLeuhdIfiYg i4hJuJ95qjt9mwxqSBEmjGbZlL+ sqM9upoWsEjup28KPvaVrdao/Hg 6WqyqUL5E2zPHfM1sb1w==

String sp_ticket,一个普通红包对应一个ticket
红包订单号 detail_id 0000000666201504290000042120   红包内部订单号
发送时间   20150429203444   红包发放时间

成功示例

<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[发放成功.]]></return_msg>
<result_code><![CDATA[SUCCESS]]></result_code>
<err_code><![CDATA[0]]></err_code>
<err_code_des><![CDATA[发放成功.]]></err_code_des>
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>
<mch_id>10010404</mch_id>
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>
<sp_ticket><![CDATA[0cca98c8c8e814883]]></sp_ticket>
<total_amount>3</total_amount>
<detail_id><![CDATA[001001040420141117000004888]]></detail_id>
<send_time><![CDATA[20150101080000]]></send_time>
</xml>

失败示例

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[268458547]]></err_code>
<err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des>
<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno>
<mch_id>10010404</mch_id>
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>
<total_amount>3</total_amount>
</xml>
/*** 摇一摇红包预下单 * @author jiosen*/
class Yhb_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct(){//设置接口链接$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["mch_billno"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");}elseif ($this->parameters["send_name"] == null ) {throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");}elseif ($this->parameters["total_amount"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");}elseif ($this->parameters["total_num"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");}elseif ($this->parameters["wishing"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");}elseif ($this->parameters["act_name"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");}elseif ($this->parameters["remark"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");}$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串//$this->parameters["re_openid"] = $this->openid;//用户openid$this->parameters["hb_type"] = 'NORMAL';//红包类型 NORMAL-普通红包;GROUP-裂变红包(可分享红包给好友,无关注公众号能力)。 $this->parameters["auth_mchid"] = '1000052601';//摇周边商户号$this->parameters["auth_appid"] = 'wxbf42bd79c4391863';//摇周边 appid$this->parameters["risk_cntl"] = 'NORMAL';//风控设置$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}function hbpreorder(){$this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}/***    作用:生成可以获得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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}

这里需要注意的是  auth_mchid 和 auth_appid 要填摇周边平台给出的appid 和商户号


调用 (这里不贴前端页面了)
       $Redpack = new \Yhb_pub(); $Redpack->setParameter('mch_billno', WxPayConf_pub::MCHID.date('YmdHis').rand(1000, 9999));//商户名称$Redpack->setParameter('send_name', "商户名称");//付款金额$Redpack->setParameter('total_amount', 100); //单位分//红包发放总人数$Redpack->setParameter('amt_type', "ALL_RAND");$Redpack->setParameter('total_num', 1);//红包祝福语$Redpack->setParameter('wishing', "摇一摇送红包");//活动名称$Redpack->setParameter('act_name', "摇一摇送红包");//备注$Redpack->setParameter('remark', "摇一摇送红包 备注");$result = $Redpack->hbpreorder();if($result[''])


3.录入红包

接口说明

在调用"创建红包活动"接口之后,调用此接口录入红包信息。注意,此接口每次调用,都会向某个活动新增一批红包信息,如果红包数少于100 个,请通过一次调用添加所有红包信息。如果红包数大于100,可以多次调用接口添加。请注意确保多次录入的红包ticket总的数目不大于创建该红包活动 时设置的total值。

接口调用说明

服务器端调用
http请求方式: POST
URL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN

请求参数说明

参数 类型 说明
access_token string accesstoken,以参数的形式拼装在url后

POST BODY:JSON格式的结构体

参数 类型 说明
lottery_id string 红包抽奖id,来自addlotteryinfo返回的lottery_id
mchid string 红包提供者的商户号,,需与预下单中的商户号mch_id一致
sponsor_appid string 红包提供商户公众号的appid,需与预下单中的公众账号appid(wxappid)一致
prize_info_list json数组 红包ticket列表,如果红包数较多,可以一次传入多个红包,批量调用该接口设置红包信息。每次请求传入的红包个数上限为100
ticket string 预下单时返回的红包ticket,单个活动红包ticket数量上限为100000个,可添加多次。

请求示例

Content-Type: application/json Post Body:
{
"lottery_id": "xxxxxxllllll",
"mchid": "10000098",
"sponsor_appid": "wx8888888888888888",
"prize_info_list": [         {            "ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g=="},{"ticket": "v1|fOhNUTap1oepSm5ap0hx1gmATM\/QX\/xn3sZWL7K+5Z10sbV5\/mZ4SwxwxbK2SPV32eLRvjd4ww1G3H5a+ypqRrySi+4oo97y63KoEQbRCPjbkyQBY8AYVyvD40V2b9slTQCm2igGY98mPe+VxZiayQ=="}]
}

返回数据说明

参数 类型 说明
errcode int 错误码。0为成功,其他为失败。详细请参考错误码表
errmsg string 错误信息
repeat_ticket_list array 重复使用的ticket列表,如为空,将不返回
expire_ticket_list array 过期的ticket列表,如为空,将不返回
invalid_amount_ticket_list array 金额不在大于1元,小于1000元的ticket列表,如为空,将不返回
success_num int 成功录入的红包数量
wrong_authmchid_ticket_list array 原因:生成红包的时候,授权商户号auth_mchid和auth_appid没有写摇周边的商户号
invalid_ticket_list array ticket解析失败,可能有错别字符或不完整

示例

{
"errcode":0,
"errmsg":"",
"repeat_ticket_list":[         {
"ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g=="                       },{
"ticket":"v1|ZiPs2l0zzXCsdfwe45dxCdHiukOdz/V/zQ/89xcnC5XnT+e47/q1FJjwCO4frSjzOxAEzJ7k2CtAg1pmcShvkChBWzc45dDGC32Dcxx4DGxczjDCGsdjowe9iHuaEn0WAO+GswFOlDYWg1ngvrRYnCY3g=="           }           } ],
"success_num":100
}
/*** 摇一摇红包 录入红包* @author jiosen*/
class lottery_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct($access_token){//设置接口链接$this->url = "https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=".$access_token;//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数  json*/function createJson(){try{//检测必填参数if($this->parameters["lottery_id"] == null){throw new SDKRuntimeException("缺少抽奖活动id lottery_id !"."<br>");}else if(empty($this->parameters["prize_info_list"])){throw new SDKRuntimeException("缺少抽奖活动红包 prize_info_list !"."<br>");}$this->parameters["mchid"] = WxPayConf_pub::MCHID;//授权商户号$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授权上号appidreturn  json_encode($this->parameters);//echo json_encode($this->parameters);die;}catch (SDKRuntimeException $e){die($e->errorMessage());}}function setJsonArray($parameter, $parameterValue){$this->parameters[$this->trimString($parameter)] = $parameterValue;}function hbpreorder(){$data = $this->createJson();$result = $this->curl_post($this->url,$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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}

调用
         $token = getAccessToken();    $Redpack = new \lottery_pub($token);    $lottery_id = ''; //这里读取数据库取出创建活动时返回的 lottery_id$Redpack->setParameter('lottery_id', $lottery_id);//活动id$prize_info_list =array(array('ticket'=>'这里取出预下单返回的sp_ticket'));$Redpack->setJsonArray('prize_info_list', $prize_info_list);//提交$Redpack->hbpreorder();

抢红包页面  php

 

 function getshakeinfo($access_token,$ticket){$getshakeinfourl='https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token='.$access_token;$jo=0;if($access_token){$data=array('ticket' =>$ticket);$rd=$this->curl_post($getshakeinfourl,json_encode($data));$jo=json_decode($rd);}else{echo 'access_token null';}return $jo;}$ticket=$_GET['ticket'];//获叏设备信息,包括 U UID 、 major 、 minor ,以及距离、 openID 等信息$token = getAccessToken();$shake=getshakeinfo($token,$ticket);$openid=$shake->data->openid;$jsapi = new Common_util_pub(); $noncestr = $jsapi->createNoncestr();$parameters = array('lottery_id' =>'创建活动时候返回的活动ID','noncestr'=>$noncestr,'openid'=>$openid,);$signStr = $jsapi->formatBizQueryParaMap($parameters,false);$key = '创建活动时候的key';$signStr=$signStr."&key=".$key;$sign = strtoupper(md5($signStr));

上一步返回的参数填在抢红包html页面

<script type="text/javascript" src="http://zb.weixin.qq.com/app/shakehb/BeaconShakehbJsBridge.js">
</script>
<script type="text/javascript">BeaconShakehbJsBridge.ready(function(){//alert();BeaconShakehbJsBridge.invoke('jumpHongbao',{lottery_id:"{$lottery_id}",noncestr:"{$noncestr}",openid:"{$openid}",sign:"{$sign}"}); });
</script>

红包绑定用户事件通知     

接口说明

用户进入红包页面时,后台会将一个红包ticket和用户openid绑定,微信会把这个事件推送到开发者填写的URL(登录公众平台进入开发者中心设置)。推送内容包含用户openid,红包活动id,红包ticket、金额以及红包绑定时间。

注:红包绑定用户不等同于用户领取红包。用户进入红包页面后,有可能不拆红包,但该红包ticket已被绑定,不能再被其他用户绑定,过期后会退回商户财付通账户。

推送XML数据包示例

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1442824314</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[ShakearoundLotteryBind]]></Event>
<LotteryId><![CDATA[lotteryid]]></LotteryId>
<Ticket><![CDATA[ticket]]></Ticket>
<Money>88</Money>
<BindTime>1442824313</BindTime>
</xml>
添加事件处理即可
/*** 事件处理* @param unknown $object* @return string*/public function handleEvent($object) {// Event是事件类型(subscribe,LOCATION)$oneEvent = $object->Event;// EventKey是菜单事件的key值$key = $object->EventKey;// 关注事件if ($oneEvent == "subscribe" || $oneEvent == "SCAN") {if(!empty($object->Ticket)) {//扫码事件....} else {//关注事件....}}else if($oneEvent=="ShakearoundLotteryBind"){//添加到数据库}else if.......其他的事件......}

完毕了.时间比较匆忙 也没时间做优化 大神经过顺便指导12  我好搓的英文基础

下面贴上完整WxPayPubHelper 集成了所有支付类 配置可用

<?php
/*** 微信支付帮助库* ====================================================* 接口分三种类型:* 【请求型接口】--Wxpay_client_*        统一支付接口类--UnifiedOrder*      订单查询接口--OrderQuery*         退款申请接口--Refund*         退款查询接口--RefundQuery*        对账单接口--DownloadBill*        短链接转换接口--ShortUrl* 【响应型接口】--Wxpay_server_*      通用通知接口--Notify*         Native支付——请求商家获取商品信息接口--NativeCall* 【其他】*       静态链接二维码--NativeLink*        JSAPI支付--JsApi* =====================================================* 【CommonUtil】常用工具:*       trimString(),设置参数时需要用到的字符处理函数*       createNoncestr(),产生随机字符串,不长于32位*      formatBizQueryParaMap(),格式化参数,签名过程需要用到*      getSign(),生成签名*         arrayToXml(),array转xml*         xmlToArray(),xml转 array*        postXmlCurl(),以post方式提交xml到对应的接口url*        postXmlSSLCurl(),使用证书,以post方式提交xml到对应的接口url
*/include_once("SDKRuntimeException.php");include_once("WxPay.pub.config.php");/*** 所有接口的基类*/
class Common_util_pub
{function __construct() {}function trimString($value){$ret = null;if (null != $value) {$ret = $value;if (strlen($ret) == 0) {$ret = null;}}return $ret;}/***  作用:产生随机字符串,不长于32位*/public function createNoncestr( $length = 32 ) {$chars = "abcdefghijklmnopqrstuvwxyz0123456789";  $str ="";for ( $i = 0; $i < $length; $i++ )  {  $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  }  return $str;}/***  作用:格式化参数,签名过程需要使用*/function formatBizQueryParaMap($paraMap, $urlencode){$buff = "";ksort($paraMap);foreach ($paraMap as $k => $v){if($urlencode){$v = urlencode($v);}//$buff .= strtolower($k) . "=" . $v . "&";$buff .= $k . "=" . $v . "&";}$reqPar;if (strlen($buff) > 0) {$reqPar = substr($buff, 0, strlen($buff)-1);}return $reqPar;}/***   作用:生成签名*/public function getSign($Obj){foreach ($Obj as $k => $v){$Parameters[$k] = $v;}//签名步骤一:按字典序排序参数ksort($Parameters);$String = $this->formatBizQueryParaMap($Parameters, false);//echo '【string1】'.$String.'</br>';//签名步骤二:在string后加入KEY$String = $String."&key=".WxPayConf_pub::KEY;//echo "【string2】".$String."</br>";//签名步骤三:MD5加密$String = md5($String);//echo "【string3】 ".$String."</br>";//签名步骤四:所有字符转为大写$result_ = strtoupper($String);//echo "【result】 ".$result_."</br>";return $result_;}/***    作用:array转xml*/function arrayToXml($arr){$xml = "<xml>";foreach ($arr as $key=>$val){if (is_numeric($val)){$xml.="<".$key.">".$val."</".$key.">"; }else$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  }$xml.="</xml>";return $xml; }/***   作用:将xml转为array*/public function xmlToArray($xml){        //将XML转为array        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);      return $array_data;}/***    作用:以post方式提交xml到对应的接口url*/public function postXmlCurl($xml,$url,$second=30){        //初始化curl        $ch = curl_init();//设置超时curl_setopt($ch, CURLOP_TIMEOUT, $second);//这里设置代理,如果有的话//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);curl_setopt($ch,CURLOPT_URL, $url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//设置headercurl_setopt($ch, CURLOPT_HEADER, FALSE);//要求结果为字符串且输出到屏幕上curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);//post提交方式curl_setopt($ch, CURLOPT_POST, TRUE);curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);//运行curl$data = curl_exec($ch);curl_close($ch);//返回结果if($data){curl_close($ch);return $data;}else { $error = curl_errno($ch);echo "curl出错,错误码:$error"."<br>"; echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";curl_close($ch);return false;}}/***     作用:使用证书,以post方式提交xml到对应的接口url*/function postXmlSSLCurl($xml,$url,$second=30){$ch = curl_init();//超时时间curl_setopt($ch,CURLOPT_TIMEOUT,$second);//这里设置代理,如果有的话//curl_setopt($ch,CURLOPT_PROXY, '8.8.8.8');//curl_setopt($ch,CURLOPT_PROXYPORT, 8080);curl_setopt($ch,CURLOPT_URL, $url);curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//设置headercurl_setopt($ch,CURLOPT_HEADER,FALSE);//要求结果为字符串且输出到屏幕上curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);//设置证书//使用证书:cert 与 key 分别属于两个.pem文件//默认格式为PEM,可以注释
//      curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
//      curl_setopt($ch,CURLOPT_SSLCERT,WxPayConf_pub::SSLCERT_PATH );
//      //默认格式为PEM,可以注释
//      curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
//      curl_setopt($ch,CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH);curl_setopt($ch, CURLOPT_SSLCERT,WxPayConf_pub::SSLCERT_PATH);curl_setopt($ch, CURLOPT_SSLKEY,WxPayConf_pub::SSLKEY_PATH);curl_setopt($ch, CURLOPT_CAINFO, WxPayConf_pub::SSLCA_PATH); // CA根证书(用来验证的网站证书是否是CA颁布)//post提交方式curl_setopt($ch,CURLOPT_POST, true);curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);$data = curl_exec($ch);//返回结果if($data){curl_close($ch);return $data;}else { $error = curl_errno($ch);echo "curl出错,错误码:$error"."<br>"; echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";curl_close($ch);return false;}}/***    作用:打印数组*/function printErr($wording='',$err=''){print_r('<pre>');echo $wording."</br>";var_dump($err);print_r('</pre>');}
}/*** 请求型接口的基类*/
class Wxpay_client_pub extends Common_util_pub
{var $parameters;//请求参数,类型为关联数组public $response;//微信返回的响应public $result;//返回参数,类型为关联数组var $url;//接口链接var $curl_timeout;//curl超时时间/***     作用:设置请求参数*/function setParameter($parameter, $parameterValue){$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);}/***  作用:设置标配的请求参数,生成签名,生成接口参数xml*/function createXml(){$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}/***    作用:post请求xml*/function postXml(){$xml = $this->createXml();$this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);return $this->response;}/***    作用:使用证书post请求xml*/function postXmlSSL(){ $xml = $this->createXml();$this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout);return $this->response;}/***     作用:获取结果,默认不使用证书*/function getResult() {       $this->postXml();$this->result = $this->xmlToArray($this->response);return $this->result;}
}/*** 统一支付接口类*/
class UnifiedOrder_pub extends Wxpay_client_pub
{   function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["out_trade_no"] == null) {throw new SDKRuntimeException("缺少统一支付接口必填参数out_trade_no!"."<br>");}elseif($this->parameters["body"] == null){throw new SDKRuntimeException("缺少统一支付接口必填参数body!"."<br>");}elseif ($this->parameters["total_fee"] == null ) {throw new SDKRuntimeException("缺少统一支付接口必填参数total_fee!"."<br>");}elseif ($this->parameters["notify_url"] == null) {throw new SDKRuntimeException("缺少统一支付接口必填参数notify_url!"."<br>");}elseif ($this->parameters["trade_type"] == null) {throw new SDKRuntimeException("缺少统一支付接口必填参数trade_type!"."<br>");}elseif ($this->parameters["trade_type"] == "JSAPI" &&$this->parameters["openid"] == NULL){throw new SDKRuntimeException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip        $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}/*** 获取prepay_id*/function getPrepayId(){$this->postXml();$this->result = $this->xmlToArray($this->response);$prepay_id = $this->result["prepay_id"];return $prepay_id;}}/*** 订单查询接口*/
class OrderQuery_pub extends Wxpay_client_pub
{function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/pay/orderquery";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;       }/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) {throw new SDKRuntimeException("订单查询接口中,out_trade_no、transaction_id至少填一个!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}}/*** 退款申请接口*/
class Refund_pub extends Wxpay_client_pub
{function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/secapi/pay/refund";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;        }/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) {throw new SDKRuntimeException("退款申请接口中,out_trade_no、transaction_id至少填一个!"."<br>");}elseif($this->parameters["out_refund_no"] == null){throw new SDKRuntimeException("退款申请接口中,缺少必填参数out_refund_no!"."<br>");}elseif($this->parameters["total_fee"] == null){throw new SDKRuntimeException("退款申请接口中,缺少必填参数total_fee!"."<br>");}elseif($this->parameters["refund_fee"] == null){throw new SDKRuntimeException("退款申请接口中,缺少必填参数refund_fee!"."<br>");}elseif($this->parameters["op_user_id"] == null){throw new SDKRuntimeException("退款申请接口中,缺少必填参数op_user_id!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}/***  作用:获取结果,使用证书通信*/function getResult() {        $this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}}/*** 退款查询接口*/
class RefundQuery_pub extends Wxpay_client_pub
{function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/pay/refundquery";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;      }/*** 生成接口参数xml*/function createXml(){      try {if($this->parameters["out_refund_no"] == null &&$this->parameters["out_trade_no"] == null &&$this->parameters["transaction_id"] == null &&$this->parameters["refund_id "] == null) {throw new SDKRuntimeException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}/***    作用:获取结果,使用证书通信*/function getResult() {        $this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}}/*** 对账单接口*/
class DownloadBill_pub extends Wxpay_client_pub
{function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/pay/downloadbill";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;     }/*** 生成接口参数xml*/function createXml(){      try {if($this->parameters["bill_date"] == null ) {throw new SDKRuntimeException("对账单接口中,缺少必填参数bill_date!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}/***     作用:获取结果,默认不使用证书*/function getResult() {       $this->postXml();$this->result = $this->xmlToArray($this->result_xml);return $this->result;}}/*** 短链接转换接口*/
class ShortUrl_pub extends Wxpay_client_pub
{function __construct() {//设置接口链接$this->url = "https://api.mch.weixin.qq.com/tools/shorturl";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;       }/*** 生成接口参数xml*/function createXml(){      try {if($this->parameters["long_url"] == null ) {throw new SDKRuntimeException("短链接转换接口中,缺少必填参数long_url!"."<br>");}$this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}/*** 获取prepay_id*/function getShortUrl(){$this->postXml();$prepay_id = $this->result["short_url"];return $prepay_id;}}/*** 响应型接口基类*/
class Wxpay_server_pub extends Common_util_pub
{public $data;//接收到的数据,类型为关联数组var $returnParameters;//返回参数,类型为关联数组/*** 将微信的请求xml转换成关联数组,以方便数据处理*/function saveData($xml){$this->data = $this->xmlToArray($xml);}function checkSign(){$tmpData = $this->data;unset($tmpData['sign']);$sign = $this->getSign($tmpData);//本地签名if ($this->data['sign'] == $sign) {return TRUE;}return FALSE;}/*** 获取微信的请求数据*/function getData(){       return $this->data;}/*** 设置返回微信的xml数据*/function setReturnParameter($parameter, $parameterValue){$this->returnParameters[$this->trimString($parameter)] = $this->trimString($parameterValue);}/*** 生成接口参数xml*/function createXml(){return $this->arrayToXml($this->returnParameters);}/*** 将xml数据返回微信*/function returnXml(){$returnXml = $this->createXml();return $returnXml;}
}/*** 通用通知接口*/
class Notify_pub extends Wxpay_server_pub
{}/*** 请求商家获取商品信息接口*/
class NativeCall_pub extends Wxpay_server_pub
{/*** 生成接口参数xml*/function createXml(){if($this->returnParameters["return_code"] == "SUCCESS"){$this->returnParameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->returnParameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->returnParameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->returnParameters["sign"] = $this->getSign($this->returnParameters);//签名}return $this->arrayToXml($this->returnParameters);}/*** 获取product_id*/function getProductId(){$product_id = $this->data["product_id"];return $product_id;}}/*** 静态链接二维码*/
class NativeLink_pub  extends Common_util_pub
{var $parameters;//静态链接参数var $url;//静态链接function __construct() {}/*** 设置参数*/function setParameter($parameter, $parameterValue) {$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);}/*** 生成Native支付链接二维码*/function createLink(){try {      if($this->parameters["product_id"] == null) {throw new SDKRuntimeException("缺少Native支付二维码链接必填参数product_id!"."<br>");}           $this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$time_stamp = time();$this->parameters["time_stamp"] = "$time_stamp";//时间戳$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["sign"] = $this->getSign($this->parameters);//签名            $bizString = $this->formatBizQueryParaMap($this->parameters, false);$this->url = "weixin://wxpay/bizpayurl?".$bizString;}catch (SDKRuntimeException $e){die($e->errorMessage());}}/*** 返回链接*/function getUrl() {        $this->createLink();return $this->url;}
}/**
* JSAPI支付——H5网页端调起支付接口
*/
class JsApi_pub extends Common_util_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidvar $parameters;//jsapi参数,格式为jsonvar $prepay_id;//使用统一支付接口得到的预支付idvar $curl_timeout;//curl超时时间function __construct() {//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/***     作用:生成可以获得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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置prepay_id*/function setPrepayId($prepayId){$this->prepay_id = $prepayId;}/***   作用:设置code*/function setCode($code_){$this->code = $code_;}/***   作用:设置jsapi的参数*/public function getParameters(){$jsApiObj["appId"] = WxPayConf_pub::APPID;$timeStamp = time();$jsApiObj["timeStamp"] = "$timeStamp";$jsApiObj["nonceStr"] = $this->createNoncestr();$jsApiObj["package"] = "prepay_id=$this->prepay_id";$jsApiObj["signType"] = "MD5";$jsApiObj["paySign"] = $this->getSign($jsApiObj);$this->parameters = json_encode($jsApiObj);return $this->parameters;}
}/*** 现金红包接口* @author gaoyl101*/
class Redpack_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct(){//设置接口链接$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["mch_billno"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");}elseif($this->parameters["nick_name"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数nick_name!"."<br>");}elseif ($this->parameters["send_name"] == null ) {throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");}elseif ($this->parameters["total_amount"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");}elseif($this->parameters["min_value"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数min_value!"."<br>");}elseif ($this->parameters["max_value"] == null ) {throw new SDKRuntimeException("缺少发红包接口必填参数max_value!"."<br>");}elseif ($this->parameters["total_num"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");}elseif ($this->parameters["wishing"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");}elseif ($this->parameters["act_name"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");}elseif ($this->parameters["remark"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");}$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["client_ip"] = $_SERVER['REMOTE_ADDR'];//终端ip$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["re_openid"] = $this->parameters["re_openid"];//$this->openid;//用户openid$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}function sendRedpack(){$this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}/***   作用:生成可以获得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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}/*** 红包支付接口* @author gaoyl101*/
class Groupredpack_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct(){//设置接口链接$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["mch_billno"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");}elseif ($this->parameters["send_name"] == null ) {throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");}elseif ($this->parameters["total_amount"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");}elseif ($this->parameters["total_num"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");}elseif ($this->parameters["amt_type"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数amt_type!"."<br>");}elseif ($this->parameters["wishing"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");}elseif ($this->parameters["act_name"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");}elseif ($this->parameters["remark"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");}$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串$this->parameters["re_openid"] = $this->openid;//用户openid$this->parameters["sign"] = $this->getSign($this->parameters);//签名return  $this->arrayToXml($this->parameters);}catch (SDKRuntimeException $e){die($e->errorMessage());}}function sendRedpack(){$this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}/***  作用:生成可以获得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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}
/*** 摇一摇红包预下单 * @author jiosen*/
class Yhb_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct(){//设置接口链接$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder";//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数xml*/function createXml(){try{//检测必填参数if($this->parameters["mch_billno"] == null){throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");}elseif ($this->parameters["send_name"] == null ) {throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");}elseif ($this->parameters["total_amount"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");}elseif ($this->parameters["total_num"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");}elseif ($this->parameters["wishing"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");}elseif ($this->parameters["act_name"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");}elseif ($this->parameters["remark"] == null) {throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");}$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串//$this->parameters["re_openid"] = $this->openid;//用户openid$this->parameters["hb_type"] = 'NORMAL';//红包类型 NORMAL-普通红包;GROUP-裂变红包(可分享红包给好友,无关注公众号能力)。 $this->parameters["auth_mchid"] = '1000052601';//摇周边商户号$this->parameters["auth_appid"] = 'wxbf42bd79c4391863';//摇周边 appid$this->parameters["risk_cntl"] = 'NORMAL';//风控设置$this->parameters["sign"] = $this->getSign($this->parameters);//签名//echo json_encode($this->parameters);die;return  $this->arrayToXml($this->parameters);//echo $this->parameters["auth_appid"].'--'.$this->parameters["auth_mchid"];die;}catch (SDKRuntimeException $e){die($e->errorMessage());}}function hbpreorder(){$this->postXmlSSL();$this->result = $this->xmlToArray($this->response);return $this->result;}/***   作用:生成可以获得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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}
/*** 摇一摇红包 创建活动* @author jiosen*/
class addlotteryinfo_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __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"] = '0';//开启活动$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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}
/*** 摇一摇红包 录入红包* @author jiosen*/
class lottery_pub extends Wxpay_client_pub
{var $code;//code码,用以获取openidvar $openid;//用户的openidfunction __construct($access_token){//设置接口链接$this->url = "https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=".$access_token;//设置curl超时时间$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;}/*** 生成接口参数  json*/function createJson(){try{//检测必填参数if($this->parameters["lottery_id"] == null){throw new SDKRuntimeException("缺少抽奖活动id lottery_id !"."<br>");}else if(empty($this->parameters["prize_info_list"])){throw new SDKRuntimeException("缺少抽奖活动红包 prize_info_list !"."<br>");}$this->parameters["mchid"] = WxPayConf_pub::MCHID;//授权商户号$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授权上号appidreturn  json_encode($this->parameters);//echo json_encode($this->parameters);die;}catch (SDKRuntimeException $e){die($e->errorMessage());}}function setJsonArray($parameter, $parameterValue){$this->parameters[$this->trimString($parameter)] = $parameterValue;}function hbpreorder(){$data = $this->createJson();$result = $this->curl_post($this->url,$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);//取出openid$data = json_decode($res,true);$this->openid = $data['openid'];return $this->openid;}/***     作用:设置code*/function setCode($code_){$this->code = $code_;}}
?>


转载于:https://www.cnblogs.com/jiosen/p/jiosen.html

微信摇一摇周边 红包相关推荐

  1. 信驰达微信iBeacon摇一摇周边方案ibeacon蓝牙设备

    苹果传出会采用ibeacon技术后,iBeacon这个词也在中国大热.而微信团队宣布6.1版本推出功能"摇一摇 周边"的新玩法,不再只是摇红包,这个新玩法就是基于iBeacon技术 ...

  2. 摇一摇周边:微信是这样连接线下商户的

    10月11日至18日,微信摇一摇周边联合全国及海外160多个城市.上百个品牌的3000家线下门店共同举办"全民摇红包"活动.顾客只需来到商家门店,打开蓝牙,进入微信摇一摇,等待&q ...

  3. php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中. 内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php clas ...

  4. 【Day40】php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中. 内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?phpclass ...

  5. C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现

    C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 原文:C#开发微信门户及应用(28)--微信"摇一摇·周边"功能的使用和接口的实现 ...

  6. 微信摇一摇开发 php,微信公众号实现摇一摇周边功能开发代码

    这篇文章主要介绍了微信公众号 摇一摇周边功能开发的相关资料,需要的朋友可以参考下 ①申请开通摇一摇功能 申请开通摇一摇周边功能.成功提交申请请求后,工作人员会在三个工作日内完成审核.若审核不通过,可以 ...

  7. 蓝牙Ibeacon室内定位和微信摇一摇周边原理分析

    苹果推出Ibeacon室内定位技术是为了弥补GPS无法覆盖室内定位这种场景.苹果意味着创新,在其推动下,蓝牙Ibeacon得到了极大的应用.而腾讯则是利用蓝牙Ibeacon在场景体验方面进行了创新,实 ...

  8. 初探微信摇一摇周边与iBeacon

    初探微信摇一摇周边与iBeacon 本文是对微信摇周边和iBeacon进行一些实验和理解. 小试牛刀 还是老规矩,先跟着已经有文档做个实验,对iBeacon有一个整体的认识,微信iBeaconID-微 ...

  9. 微信摇一摇周边新功能上线

    自4月12日微信"摇一摇周边"正式对外开放注册以来,商户通过摇周边平台增强了和用户之间的互动性,为用户提供了更多个性化和趣味性的近场服务.同时,为了优化用户和商户体验,摇周边功能也 ...

最新文章

  1. 【Smart_Point】C/C++ 中独占指针unique_ptr
  2. 形式化方法、《大象:Thinking in UML》
  3. python之路-双下方法
  4. http 请求(tomcat) 返回 错误页面信息
  5. cv2.error: opencv(4.4.0)_【从零学习OpenCV 4】轮廓面积与长度
  6. 【微信】1.微信小程序开发--入门
  7. consul docker register
  8. tcp程序——回声客户端
  9. 天涯明月刀7月5号服务器维护,天涯明月刀7月5日更新_天刀7月5日版本改动_3DM网游...
  10. 电气simulink常用模块_重庆台达PLC控制柜施工技术标准 - 重庆电工电气
  11. 强化学习必知二要素:计算效率和样本效率
  12. html修改成透明色,在html2canvas中将透明颜色更改为白色
  13. 如何用Qlikview在dashboard中创建条形图时,统计时忽略空值
  14. 客户流失预测_如何不预测和防止客户流失
  15. 多人交互与体感游戏开发相关技术说明
  16. css3绘制常见的30种形状(心形,五角星,六边形,钻石,对话框,阴阳鱼图等)
  17. 安装alibaba cloud toolkit及远程部署
  18. win10系统盘多大合适_韩博士装机大师一键重装win10系统
  19. python 设计模式 23种_python实现23种设计模式
  20. 橘子学Arthas01之概念和安装

热门文章

  1. 安霸Ambarella CV系列芯片
  2. 网络爬虫---从千图网爬取图片到本地
  3. 浏览器显示“您与此网站之间建立的连接不安全”的解决方案
  4. 大禹电子:超声波水下通讯设备测试结论
  5. rounded-{0 | top | right | bottom | left | circle } 边角半径设置 - bootStrap4常用CSS笔记(2019-05-16 09:38)...
  6. 乔戈里推荐的新版Java学习路线,开源!
  7. screen 使用命令
  8. 数据化是什么,企业为什么要数据化管理?【Teamface企典】
  9. ***卖火柴的lly***
  10. 类似于计算机的文件管理器,XYplorer 21比电脑自带的文件管理器还好用的工具