



红包组件接口调用流程
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码,用以获取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.预下单

请求示例
<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码,用以获取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.录入红包

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码,用以获取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_;}} 调用<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> 红包绑定用户事件通知 <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 我好搓的英文基础<?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($