使用PHP实现微信摇一摇周边红包_php实例

最近接了个项目,其中有需求是要实现摇一摇红包功能,在网上搜了好久,都没有找到源码,没办法,只有自动写了,下面小编把我的劳动成果分享给大家供大家参考,本文写的不好,还请各位大侠提出宝贵意见,共同学习进步。

微信官方说明如下

摇一摇红包说明

功能说明

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

开发者可通过接口开发摇一摇红包功能,特点包括:
 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

请求参数说明

请求示例

 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 代码

$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

需要商户证书

请求参数说明

请求示例

<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>

返回数据说明

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

成功示例

 <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码,用以获取openid
  var $openid;//用户的openid
  function __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

请求参数说明

POST BODY:JSON格式的结构体

请求示例

 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":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码,用以获取openid
  var $openid;//用户的openid
  function __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;//授权上号appid
      return 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_;
  }
}

 调用

<br>    $token = getAccessToken();<br>    $Redpack = new \lottery_pub($token);<br>    $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);
    //设置header
    curl_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);
    //设置header
    curl_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码,用以获取openid
  var $openid;//用户的openid
  var $parameters;//jsapi参数,格式为json
  var $prepay_id;//使用统一支付接口得到的预支付id
  var $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码,用以获取openid
  var $openid;//用户的openid
  function __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码,用以获取openid
  var $openid;//用户的openid
  function __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码,用以获取openid
  var $openid;//用户的openid
  function __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码,用以获取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"] = '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码,用以获取openid
  var $openid;//用户的openid
  function __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;//授权上号appid
      return 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_;
  }
}
?> 

以上内容比较长,希望大家在阅读的使用有点耐心,本文写的还算不错嘀,自我感觉良好吧,呵呵。使用PHP实现微信摇一摇周边红包相关内容就先给大家介绍到这里,希望对大家有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索摇一摇周边红包
微信摇一摇周边红包、摇一摇周边红包、摇一摇周边抢红包源码、摇一摇.周边红包1.6、摇一摇周边怎么发红包,以便于您获取更多的相关知识。

时间: 2024-09-19 01:02:00

使用PHP实现微信摇一摇周边红包_php实例的相关文章

PHP微信开发之查询城市天气_php实例

PHP微信查询城市天气,首先,你需要找到一个获取天气的API,此处,我用的是百度的apistore,申请和使用API的网址:http://apistore.baidu.com/apiworks/servicedetail/112.html  登录百度账号,并用手机发送请求获取apikey.有了apikey,可以按照它的示例来请求城市天气了.(可以按照城市中文名,拼音,城市编号等来查询)  你可以现在本地做测试,请求完成之后,再放到自己的域名空间的脚本里.  测试的脚本例如:(注意apikey填写

php实现微信发红包_php实例

本文实例讲述了php实现的微信红包算法.分享给大家供大家参考.具体如下: 具体代码: <?php /** * 微信红包的类 * */ CLASS WXHongBao { private $mch_id = "111111";//商户ID写死 private $wxappid = "22222222";//微信公众号,写死 private $client_ip = "119.29.80.114"; //调用红包接口的主机的IP,服务端IP,写

微信公众平台天气预报功能开发_php实例

本来是想自己直接从中国天气网获取信息并处理,后来发现处理起来太麻烦,而且要获取所有城市的城市编码,再有就是!不支持国外天气!!(我们学校有很多毕业生在国外上学,所以我考虑还是做出支持国外天气的版本) 因此考虑直接调用别人的API,一开始选用了方倍工作室已经做好的接口(无奈也没有国外).直到有一天返回北京天气温度是零下的时候(当时天热到不敢出门)...换!换!换! 后来终于发现最靠谱的接口----百度的天气API. 废话少说,首先大家要上 百度地图API申请一个专用key(大概一分钟就搞定了,很方

java微信开发之上传下载多媒体文件_php实例

回复图片.音频.视频消息都是需要media_id的,这个是需要将多媒体文件上传到微信服务器才有的. 将多媒体文件上传到微信服务器,以及从微信服务器下载文件,可以参考:http://mp.weixin.qq.com/wiki/index.php?title=上传下载多媒体文件 上传下载多媒体文件的方法还是写到WeixinUtil.java中. 代码如下: import java.io.BufferedOutputStream; import java.io.BufferedReader; impo

php微信开发之上传临时素材_php实例

本文实例为大家分享了php微信上传临时素材的具体代码,供大家参考,具体内容如下 public function uploadImg($imgUrl){ $TOKEN=$this->getAccessToken(); $URL ='http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$TOKEN.'&type=image'; $data = array('media'=>'@'.$imgUrl); $resu

PHP微信开发之模板消息回复_php实例

微信公众平台上,有个模板消息回复接口:可以用来实现回复特定的消息-----比如用户下了订单之后,回复给用户您的订单正在处理中...比如下面这张图: 用户进行了一些操作之后,服务号能够返回特定的消息----这就是模板消息. 要实现模板消息的回复,你的公众号必须是经过微信认证的,如果是个人的订阅号,暂时不支持微信认证.不过也不影响做测试-----你可以使用测试公众号: 使用测试号的时候,接口信息的配置就不讲了,可以参考我之前的博客. 使用维码登录测试号之后,需要用你的微信号去关注这个测试号,不然看不

PHP微信开发之有道翻译_php实例

首先,你需要去有道翻译API官网去申请key:http://fanyi.youdao.com/openapi?path=data-mode 得到key之后,就可以开始从该API获得查询的数据了(返回json还是XML,看个人喜好,这里我用的是json)  下面我直接把responseMsg方法里,实现翻译的代码给出.如果你第一次接触微信API,不懂这个方法是干什么的,请去点击PHP微信开发之文本自动回复 </pre><a target=_blank href="http://b

微信自定义分享php代码分析_php实例

前一段之间做微信自定义分享,积累了一些经验,分享给大家. 步骤一.二在微信开发者文档中已经很详细了,直接从步骤三开始吧. 步骤三要参数微信的参数,除了appId之外,其他的参数都是动态的,这里,我用的php语言,在后端生成的参数,代码如下: php端代码: public function getwxinfo(){ $dataurl = I('dataurl'); include('./ThinkPHP/Library/Vendor/jssdk/jssdk.php'); $jssdk = new

PHP 微信扫码支付源代码(推荐)_php实例

代码中包含四个文件createUrl.php.ArrayToXML.php.returnGoodsUrl.php.notifyUrl.php . 具体详细代码大家可以参考下: createUrl.php:创建微信二维码支付链接 ``` /** * @author chantrans * 本页面的作用是生成商品二维码链接 */ echo createUrl("12314124"); /** * 产生随机字符串 */ function getNonceStr() $chars = 'ABC