使用PHP實(shí)現(xiàn)微信搖一搖周邊紅包
最近接了個(gè)項(xiàng)目,其中有需求是要實(shí)現(xiàn)搖一搖紅包功能,在網(wǎng)上搜了好久,都沒有找到源碼,沒辦法,只有自動(dòng)寫了,下面小編把我的勞動(dòng)成果分享給大家供大家參考,本文寫的不好,還請各位大俠提出寶貴意見,共同學(xué)習(xí)進(jìn)步。
微信官方說明如下
搖一搖紅包說明
功能說明
搖一搖周邊紅包接口是為線下商戶提供的發(fā)紅包功能。用戶可以在商家門店等線下場所通過搖一搖周邊領(lǐng)取商家發(fā)放的紅包,在線上轉(zhuǎn)發(fā)分享無效。
開發(fā)者可通過接口開發(fā)搖一搖紅包功能,特點(diǎn)包括:
1.可選擇使用模板加載頁或自定義Html5頁面調(diào)起微信原生紅包頁面(詳見創(chuàng)建紅包活動(dòng)中use_template字段,1為使用模板,2為使用自定義Html5頁面)
2.原生紅包頁面拆紅包,無需通過公眾號消息下發(fā)
3.提供關(guān)注公眾號能力,用戶可自行選擇是否關(guān)注(裂變紅包分享時(shí)無效)
4.完成頁面可配置跳轉(zhuǎn)鏈接,可跳轉(zhuǎn)商戶的其他自定義Html5頁面
5.同一個(gè)用戶在單個(gè)紅包活動(dòng)中只能領(lǐng)取1次紅包
用戶側(cè)交互流程
紅包組件接口調(diào)用流程
1. 申請紅包接口權(quán)限:登錄搖一搖周邊商戶后臺(tái)https://zb.weixin.qq.com ,進(jìn)入開發(fā)者支持,申請開通搖一搖紅包組件接口;
2. 紅包預(yù)下單:調(diào)用微信支付的api進(jìn)行紅包預(yù)下單,告知需要發(fā)放的紅包金額,人數(shù),生成紅包ticket;
3. 創(chuàng)建活動(dòng)并錄入紅包信息:調(diào)用搖周邊平臺(tái)的api錄入創(chuàng)建紅包活動(dòng)并錄入信息,傳入預(yù)下單時(shí)生成的紅包ticket;
4. 調(diào)用jsapi抽紅包:在搖出的頁面中通過調(diào)用jsapi抽紅包,抽中紅包的用戶可以拆紅包;
5. 調(diào)用以上接口時(shí),紅包提供商戶和紅包發(fā)放商戶公眾號要求一致。
說明:
紅包提供商戶:紅包預(yù)下單接口傳入的參數(shù)wxappid所代表的商戶
紅包發(fā)放商戶:調(diào)用紅包接口創(chuàng)建紅包活動(dòng)、錄入紅包信息、發(fā)放紅包的商戶公眾號所以步驟應(yīng)該是 ① 創(chuàng)建紅包活動(dòng) ② 預(yù)下單 ③ 錄入紅包找出來了之前整理的類 在寫一下1.創(chuàng)建活動(dòng)
接口說明
創(chuàng)建紅包活動(dòng),設(shè)置紅包活動(dòng)有效期,紅包活動(dòng)開關(guān)等基本信息,返回活動(dòng)id
接口調(diào)用說明
服務(wù)器端調(diào)用
http請求方式: POST
URL: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=LOGO_URL
請求參數(shù)說明

請求示例
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"
}
返回?cái)?shù)據(jù)說明

示例
{
"errcode":0,
"errmsg":"",
"lottery_id":"xxxxxxllllll",
"page_id":1,
}
/**
* 搖一搖紅包 創(chuàng)建活動(dòng)
* @author jiosen
*/
class addlotteryinfo_pub extends Wxpay_client_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
function __construct($access_token,$logo)
{
//設(shè)置接口鏈接
$this->url = "https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=".$access_token."&use_template=1&logo_url=".$logo;
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù) json
*/
function createJson()
{
try
{
//檢測必填參數(shù)
if($this->parameters["title"] == null)
{
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)名稱title!"."<br>");
}elseif ($this->parameters["desc"] == null ) {
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)描述desc!"."<br>");
}elseif ($this->parameters["begin_time"] == null) {
throw new SDKRuntimeException("缺少活動(dòng)開始時(shí)間 begin_time!"."<br>");
}elseif ($this->parameters["expire_time"] == null) {
throw new SDKRuntimeException("缺少活動(dòng)結(jié)束時(shí)間 expire_time!"."<br>");
}elseif ($this->parameters["total"] == null) {
throw new SDKRuntimeException("缺少紅包總數(shù)total!"."<br>");
}elseif ($this->parameters["jump_url"] == null) {
throw new SDKRuntimeException("缺少紅包關(guān)注跳轉(zhuǎn)連接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';//開啟活動(dòng)
$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);//發(fā)送一個(gè)常規(guī)的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的數(shù)據(jù)包
$rv = curl_exec($curl);//輸出內(nèi)容
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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
要注意提交的數(shù)據(jù)是json 不是xml
前端頁面隨便做一下

php 代碼
$title = $_POST['title'];
$file = $_FILES['img'];
$tools = new Tools(); //這是一個(gè)文件上傳類 隨意選擇一樣你喜歡的上傳方式
$logo_url = $tools->_upload_award("poll_img", $file, time());
$description = $_POST['description'];
$total = $_POST['total'];
$jump_url = $_POST['jump_url'];
$token = getAccessToken(); //這里是我封裝的一個(gè)獲取 token的 方法 做了時(shí)間限制 防止超出調(diào)用次數(shù)
$Redpack = new addlotteryinfo_pub($token,SITE_URL.$logo_url);
$time = time();
$end = time()+60*24*60*60;//兩個(gè)月 這里的開始和結(jié)束時(shí)間我固定了
$key = $Redpack->createNoncestr(); //key
$Redpack->setParameter('title', $title);
//活動(dòng)標(biāo)題
$Redpack->setParameter('desc', $description);
//活動(dòng)描述
$Redpack->setParameter('begin_time', $time);
//開始時(shí)間
$Redpack->setParameter('expire_time', $end);
//結(jié)束時(shí)間
$Redpack->setParameter('total', $total);
//紅包總數(shù)
$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'];
//這里記得存一下數(shù)據(jù)庫;
}else{
//echo '創(chuàng)建活動(dòng)失?。?.$result['errmsg'];
//這里是錯(cuò)誤提示
}
2.預(yù)下單
接口說明
設(shè)置單個(gè)紅包的金額,類型等,生成紅包信息。預(yù)下單完成后,需要在72小時(shí)內(nèi)調(diào)用jsapi完成抽紅包的操作。(紅包過期失效后,資金會(huì)退回到商戶財(cái)付通帳號。)
接口調(diào)用說明
服務(wù)器端調(diào)用
http請求方式: POST
https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder
POST數(shù)據(jù)格式:XML
需要商戶證書
請求參數(shù)說明


請求示例
<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[恭喜發(fā)財(cái) ]]></wishing> <act_name><![CDATA[ 新年紅包 ]]></act_name> <remark><![CDATA[新年紅包 ]]></remark> <risk_cntl><![CDATA[NORMAL]]></risk_cntl> <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> </xml>
返回?cái)?shù)據(jù)說明

以下字段在return_code 和result_code都為SUCCESS的時(shí)候有返回

成功示例
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[發(fā)放成功.]]></return_msg> <result_code><![CDATA[SUCCESS]]></result_code> <err_code><![CDATA[0]]></err_code> <err_code_des><![CDATA[發(fā)放成功.]]></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[系統(tǒng)繁忙,請稍后再試.]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code><![CDATA[268458547]]></err_code>
<err_code_des><![CDATA[系統(tǒng)繁忙,請稍后再試.]]></err_code_des>
<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno>
<mch_id>10010404</mch_id>
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid>
<total_amount>3</total_amount>
</xml>
/**
* 搖一搖紅包預(yù)下單
* @author jiosen
*/
class Yhb_pub extends Wxpay_client_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["mch_billno"] == null)
{
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)mch_billno!"."<br>");
}elseif ($this->parameters["send_name"] == null ) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)send_name!"."<br>");
}elseif ($this->parameters["total_amount"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_amount!"."<br>");
}elseif ($this->parameters["total_num"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_num!"."<br>");
}elseif ($this->parameters["wishing"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)wishing!"."<br>");
}elseif ($this->parameters["act_name"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)act_name!"."<br>");
}elseif ($this->parameters["remark"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)remark!"."<br>");
}
$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
//$this->parameters["re_openid"] = $this->openid;//用戶openid
$this->parameters["hb_type"] = 'NORMAL';//紅包類型 NORMAL-普通紅包;GROUP-裂變紅包(可分享紅包給好友,無關(guān)注公眾號能力)。
$this->parameters["auth_mchid"] = '1000052601';//搖周邊商戶號
$this->parameters["auth_appid"] = 'wxbf42bd79c4391863';//搖周邊 appid
$this->parameters["risk_cntl"] = 'NORMAL';//風(fēng)控設(shè)置
$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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
這里需要注意的是 auth_mchid 和 auth_appid 要填搖周邊平臺(tái)給出的appid 和商戶號
調(diào)用 (這里不貼前端頁面了)
$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); //單位分
//紅包發(fā)放總?cè)藬?shù)
$Redpack->setParameter('amt_type', "ALL_RAND");
$Redpack->setParameter('total_num', 1);
//紅包祝福語
$Redpack->setParameter('wishing', "搖一搖送紅包");
//活動(dòng)名稱
$Redpack->setParameter('act_name', "搖一搖送紅包");
//備注
$Redpack->setParameter('remark', "搖一搖送紅包 備注");
$result = $Redpack->hbpreorder();
if($result[''])
3.錄入紅包
接口說明
在調(diào)用"創(chuàng)建紅包活動(dòng)"接口之后,調(diào)用此接口錄入紅包信息。注意,此接口每次調(diào)用,都會(huì)向某個(gè)活動(dòng)新增一批紅包信息,如果紅包數(shù)少于100 個(gè),請通過一次調(diào)用添加所有紅包信息。如果紅包數(shù)大于100,可以多次調(diào)用接口添加。請注意確保多次錄入的紅包ticket總的數(shù)目不大于創(chuàng)建該紅包活動(dòng) 時(shí)設(shè)置的total值。
接口調(diào)用說明
服務(wù)器端調(diào)用
http請求方式: POST
URL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN
請求參數(shù)說明

POST BODY:JSON格式的結(jié)構(gòu)體
請求示例
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=="
}
]
}
返回?cái)?shù)據(jù)說明

示例
{
"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)
{
//設(shè)置接口鏈接
$this->url = "https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=".$access_token;
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù) json
*/
function createJson()
{
try
{
//檢測必填參數(shù)
if($this->parameters["lottery_id"] == null)
{
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)id lottery_id !"."<br>");
}else if(empty($this->parameters["prize_info_list"])){
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)紅包 prize_info_list !"."<br>");
}
$this->parameters["mchid"] = WxPayConf_pub::MCHID;//授權(quán)商戶號
$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授權(quán)上號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);//發(fā)送一個(gè)常規(guī)的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的數(shù)據(jù)包
$rv = curl_exec($curl);//輸出內(nèi)容
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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
調(diào)用
<br> $token = getAccessToken();<br> $Redpack = new \lottery_pub($token);<br> $lottery_id = ''; //這里讀取數(shù)據(jù)庫取出創(chuàng)建活動(dòng)時(shí)返回的 lottery_id
$Redpack->setParameter('lottery_id', $lottery_id);
//活動(dòng)id
$prize_info_list =array(array('ticket'=>'這里取出預(yù)下單返回的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'];//獲叏設(shè)備信息,包括 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' =>'創(chuàng)建活動(dòng)時(shí)候返回的活動(dòng)ID',
'noncestr'=>$noncestr,
'openid'=>$openid,
);
$signStr = $jsapi->formatBizQueryParaMap($parameters,false);
$key = '創(chuàng)建活動(dòng)時(shí)候的key';
$signStr=$signStr."&key=".$key;
$sign = strtoupper(md5($signStr));
上一步返回的參數(shù)填在搶紅包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>
紅包綁定用戶事件通知
接口說明
用戶進(jìn)入紅包頁面時(shí),后臺(tái)會(huì)將一個(gè)紅包ticket和用戶openid綁定,微信會(huì)把這個(gè)事件推送到開發(fā)者填寫的URL(登錄公眾平臺(tái)進(jìn)入開發(fā)者中心設(shè)置)。推送內(nèi)容包含用戶openid,紅包活動(dòng)id,紅包ticket、金額以及紅包綁定時(shí)間。
注:紅包綁定用戶不等同于用戶領(lǐng)取紅包。用戶進(jìn)入紅包頁面后,有可能不拆紅包,但該紅包ticket已被綁定,不能再被其他用戶綁定,過期后會(huì)退回商戶財(cái)付通賬戶。
推送XML數(shù)據(jù)包示例
<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;
// 關(guān)注事件
if ($oneEvent == "subscribe" || $oneEvent == "SCAN") {
if(!empty($object->Ticket)) {
//掃碼事件
....
} else {
//關(guān)注事件
....
}
}else if($oneEvent=="ShakearoundLotteryBind"){
//添加到數(shù)據(jù)庫
}else if.......其他的事件......
}
完畢了.時(shí)間比較匆忙 也沒時(shí)間做優(yōu)化 大神經(jīng)過順便指導(dǎo)12 我好搓的英文基礎(chǔ)
下面貼上完整WxPayPubHelper 集成了所有支付類 配置可用
<?php
/**
* 微信支付幫助庫
* ====================================================
* 接口分三種類型:
* 【請求型接口】--Wxpay_client_
* 統(tǒng)一支付接口類--UnifiedOrder
* 訂單查詢接口--OrderQuery
* 退款申請接口--Refund
* 退款查詢接口--RefundQuery
* 對賬單接口--DownloadBill
* 短鏈接轉(zhuǎn)換接口--ShortUrl
* 【響應(yīng)型接口】--Wxpay_server_
* 通用通知接口--Notify
* Native支付——請求商家獲取商品信息接口--NativeCall
* 【其他】
* 靜態(tài)鏈接二維碼--NativeLink
* JSAPI支付--JsApi
* =====================================================
* 【CommonUtil】常用工具:
* trimString(),設(shè)置參數(shù)時(shí)需要用到的字符處理函數(shù)
* createNoncestr(),產(chǎn)生隨機(jī)字符串,不長于32位
* formatBizQueryParaMap(),格式化參數(shù),簽名過程需要用到
* getSign(),生成簽名
* arrayToXml(),array轉(zhuǎn)xml
* xmlToArray(),xml轉(zhuǎn) array
* postXmlCurl(),以post方式提交xml到對應(yīng)的接口url
* postXmlSSLCurl(),使用證書,以post方式提交xml到對應(yīng)的接口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;
}
/**
* 作用:產(chǎn)生隨機(jī)字符串,不長于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;
}
/**
* 作用:格式化參數(shù),簽名過程需要使用
*/
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;
}
//簽名步驟一:按字典序排序參數(shù)
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>";
//簽名步驟四:所有字符轉(zhuǎn)為大寫
$result_ = strtoupper($String);
//echo "【result】 ".$result_."</br>";
return $result_;
}
/**
* 作用:array轉(zhuǎn)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轉(zhuǎn)為array
*/
public function xmlToArray($xml)
{
//將XML轉(zhuǎn)為array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
/**
* 作用:以post方式提交xml到對應(yīng)的接口url
*/
public function postXmlCurl($xml,$url,$second=30)
{
//初始化curl
$ch = curl_init();
//設(shè)置超時(shí)
curl_setopt($ch, CURLOP_TIMEOUT, $second);
//這里設(shè)置代理,如果有的話
//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);
//設(shè)置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求結(jié)果為字符串且輸出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//運(yùn)行curl
$data = curl_exec($ch);
curl_close($ch);
//返回結(jié)果
if($data)
{
curl_close($ch);
return $data;
}
else
{
$error = curl_errno($ch);
echo "curl出錯(cuò),錯(cuò)誤碼:$error"."<br>";
echo "<a ;
curl_close($ch);
return false;
}
}
/**
* 作用:使用證書,以post方式提交xml到對應(yīng)的接口url
*/
function postXmlSSLCurl($xml,$url,$second=30)
{
$ch = curl_init();
//超時(shí)時(shí)間
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
//這里設(shè)置代理,如果有的話
//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);
//設(shè)置header
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求結(jié)果為字符串且輸出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//設(shè)置證書
//使用證書:cert 與 key 分別屬于兩個(gè).pem文件
//默認(rèn)格式為PEM,可以注釋
// curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
// curl_setopt($ch,CURLOPT_SSLCERT,WxPayConf_pub::SSLCERT_PATH );
// //默認(rèn)格式為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根證書(用來驗(yàn)證的網(wǎng)站證書是否是CA頒布)
//post提交方式
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data = curl_exec($ch);
//返回結(jié)果
if($data){
curl_close($ch);
return $data;
}
else {
$error = curl_errno($ch);
echo "curl出錯(cuò),錯(cuò)誤碼:$error"."<br>";
echo "<a ;
curl_close($ch);
return false;
}
}
/**
* 作用:打印數(shù)組
*/
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;//請求參數(shù),類型為關(guān)聯(lián)數(shù)組
public $response;//微信返回的響應(yīng)
public $result;//返回參數(shù),類型為關(guān)聯(lián)數(shù)組
var $url;//接口鏈接
var $curl_timeout;//curl超時(shí)時(shí)間
/**
* 作用:設(shè)置請求參數(shù)
*/
function setParameter($parameter, $parameterValue)
{
$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
/**
* 作用:設(shè)置標(biāo)配的請求參數(shù),生成簽名,生成接口參數(shù)xml
*/
function createXml()
{
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$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;
}
/**
* 作用:獲取結(jié)果,默認(rèn)不使用證書
*/
function getResult()
{
$this->postXml();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 統(tǒng)一支付接口類
*/
class UnifiedOrder_pub extends Wxpay_client_pub
{
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["out_trade_no"] == null)
{
throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)out_trade_no!"."<br>");
}elseif($this->parameters["body"] == null){
throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)body!"."<br>");
}elseif ($this->parameters["total_fee"] == null ) {
throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)total_fee!"."<br>");
}elseif ($this->parameters["notify_url"] == null) {
throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)notify_url!"."<br>");
}elseif ($this->parameters["trade_type"] == null) {
throw new SDKRuntimeException("缺少統(tǒng)一支付接口必填參數(shù)trade_type!"."<br>");
}elseif ($this->parameters["trade_type"] == "JSAPI" &&
$this->parameters["openid"] == NULL){
throw new SDKRuntimeException("統(tǒng)一支付接口中,缺少必填參數(shù)openid!trade_type為JSAPI時(shí),openid為必填參數(shù)!"."<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();//隨機(jī)字符串
$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()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/pay/orderquery";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["out_trade_no"] == null &&
$this->parameters["transaction_id"] == null)
{
throw new SDKRuntimeException("訂單查詢接口中,out_trade_no、transaction_id至少填一個(gè)!"."<br>");
}
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$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() {
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) {
throw new SDKRuntimeException("退款申請接口中,out_trade_no、transaction_id至少填一個(gè)!"."<br>");
}elseif($this->parameters["out_refund_no"] == null){
throw new SDKRuntimeException("退款申請接口中,缺少必填參數(shù)out_refund_no!"."<br>");
}elseif($this->parameters["total_fee"] == null){
throw new SDKRuntimeException("退款申請接口中,缺少必填參數(shù)total_fee!"."<br>");
}elseif($this->parameters["refund_fee"] == null){
throw new SDKRuntimeException("退款申請接口中,缺少必填參數(shù)refund_fee!"."<br>");
}elseif($this->parameters["op_user_id"] == null){
throw new SDKRuntimeException("退款申請接口中,缺少必填參數(shù)op_user_id!"."<br>");
}
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//簽名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:獲取結(jié)果,使用證書通信
*/
function getResult()
{
$this->postXmlSSL();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 退款查詢接口
*/
class RefundQuery_pub extends Wxpay_client_pub
{
function __construct() {
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/pay/refundquery";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)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四個(gè)參數(shù)必填一個(gè)!"."<br>");
}
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//簽名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:獲取結(jié)果,使用證書通信
*/
function getResult()
{
$this->postXmlSSL();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
}
/**
* 對賬單接口
*/
class DownloadBill_pub extends Wxpay_client_pub
{
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/pay/downloadbill";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
if($this->parameters["bill_date"] == null )
{
throw new SDKRuntimeException("對賬單接口中,缺少必填參數(shù)bill_date!"."<br>");
}
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$this->parameters["sign"] = $this->getSign($this->parameters);//簽名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
/**
* 作用:獲取結(jié)果,默認(rèn)不使用證書
*/
function getResult()
{
$this->postXml();
$this->result = $this->xmlToArray($this->result_xml);
return $this->result;
}
}
/**
* 短鏈接轉(zhuǎn)換接口
*/
class ShortUrl_pub extends Wxpay_client_pub
{
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/tools/shorturl";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
if($this->parameters["long_url"] == null )
{
throw new SDKRuntimeException("短鏈接轉(zhuǎn)換接口中,缺少必填參數(shù)long_url!"."<br>");
}
$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$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;
}
}
/**
* 響應(yīng)型接口基類
*/
class Wxpay_server_pub extends Common_util_pub
{
public $data;//接收到的數(shù)據(jù),類型為關(guān)聯(lián)數(shù)組
var $returnParameters;//返回參數(shù),類型為關(guān)聯(lián)數(shù)組
/**
* 將微信的請求xml轉(zhuǎn)換成關(guān)聯(lián)數(shù)組,以方便數(shù)據(jù)處理
*/
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;
}
/**
* 獲取微信的請求數(shù)據(jù)
*/
function getData()
{
return $this->data;
}
/**
* 設(shè)置返回微信的xml數(shù)據(jù)
*/
function setReturnParameter($parameter, $parameterValue)
{
$this->returnParameters[$this->trimString($parameter)] = $this->trimString($parameterValue);
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
return $this->arrayToXml($this->returnParameters);
}
/**
* 將xml數(shù)據(jù)返回微信
*/
function returnXml()
{
$returnXml = $this->createXml();
return $returnXml;
}
}
/**
* 通用通知接口
*/
class Notify_pub extends Wxpay_server_pub
{
}
/**
* 請求商家獲取商品信息接口
*/
class NativeCall_pub extends Wxpay_server_pub
{
/**
* 生成接口參數(shù)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();//隨機(jī)字符串
$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;
}
}
/**
* 靜態(tài)鏈接二維碼
*/
class NativeLink_pub extends Common_util_pub
{
var $parameters;//靜態(tài)鏈接參數(shù)
var $url;//靜態(tài)鏈接
function __construct()
{
}
/**
* 設(shè)置參數(shù)
*/
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支付二維碼鏈接必填參數(shù)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";//時(shí)間戳
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$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網(wǎng)頁端調(diào)起支付接口
*/
class JsApi_pub extends Common_util_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
var $parameters;//jsapi參數(shù),格式為json
var $prepay_id;//使用統(tǒng)一支付接口得到的預(yù)支付id
var $curl_timeout;//curl超時(shí)時(shí)間
function __construct()
{
//設(shè)置curl超時(shí)時(shí)間
$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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置prepay_id
*/
function setPrepayId($prepayId)
{
$this->prepay_id = $prepayId;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
/**
* 作用:設(shè)置jsapi的參數(shù)
*/
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;
}
}
/**
* 現(xiàn)金紅包接口
* @author gaoyl101
*/
class Redpack_pub extends Wxpay_client_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["mch_billno"] == null)
{
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)mch_billno!"."<br>");
}elseif($this->parameters["nick_name"] == null){
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)nick_name!"."<br>");
}elseif ($this->parameters["send_name"] == null ) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)send_name!"."<br>");
}elseif ($this->parameters["total_amount"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_amount!"."<br>");
}elseif($this->parameters["min_value"] == null){
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)min_value!"."<br>");
}elseif ($this->parameters["max_value"] == null ) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)max_value!"."<br>");
}elseif ($this->parameters["total_num"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_num!"."<br>");
}elseif ($this->parameters["wishing"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)wishing!"."<br>");
}elseif ($this->parameters["act_name"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)act_name!"."<br>");
}elseif ($this->parameters["remark"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)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();//隨機(jī)字符串
$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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置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()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["mch_billno"] == null)
{
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)mch_billno!"."<br>");
}elseif ($this->parameters["send_name"] == null ) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)send_name!"."<br>");
}elseif ($this->parameters["total_amount"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_amount!"."<br>");
}elseif ($this->parameters["total_num"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_num!"."<br>");
}elseif ($this->parameters["amt_type"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)amt_type!"."<br>");
}elseif ($this->parameters["wishing"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)wishing!"."<br>");
}elseif ($this->parameters["act_name"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)act_name!"."<br>");
}elseif ($this->parameters["remark"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)remark!"."<br>");
}
$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
$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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
/**
* 搖一搖紅包預(yù)下單
* @author jiosen
*/
class Yhb_pub extends Wxpay_client_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
function __construct()
{
//設(shè)置接口鏈接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder";
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù)xml
*/
function createXml()
{
try
{
//檢測必填參數(shù)
if($this->parameters["mch_billno"] == null)
{
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)mch_billno!"."<br>");
}elseif ($this->parameters["send_name"] == null ) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)send_name!"."<br>");
}elseif ($this->parameters["total_amount"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_amount!"."<br>");
}elseif ($this->parameters["total_num"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)total_num!"."<br>");
}elseif ($this->parameters["wishing"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)wishing!"."<br>");
}elseif ($this->parameters["act_name"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)act_name!"."<br>");
}elseif ($this->parameters["remark"] == null) {
throw new SDKRuntimeException("缺少發(fā)紅包接口必填參數(shù)remark!"."<br>");
}
$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公眾賬號ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號
$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串
//$this->parameters["re_openid"] = $this->openid;//用戶openid
$this->parameters["hb_type"] = 'NORMAL';//紅包類型 NORMAL-普通紅包;GROUP-裂變紅包(可分享紅包給好友,無關(guān)注公眾號能力)。
$this->parameters["auth_mchid"] = '1000052601';//搖周邊商戶號
$this->parameters["auth_appid"] = 'wxbf42bd79c4391863';//搖周邊 appid
$this->parameters["risk_cntl"] = 'NORMAL';//風(fēng)控設(shè)置
$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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
/**
* 搖一搖紅包 創(chuàng)建活動(dòng)
* @author jiosen
*/
class addlotteryinfo_pub extends Wxpay_client_pub
{
var $code;//code碼,用以獲取openid
var $openid;//用戶的openid
function __construct($access_token,$logo)
{
//設(shè)置接口鏈接
$this->url = "https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=".$access_token."&use_template=1&logo_url=".$logo;
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù) json
*/
function createJson()
{
try
{
//檢測必填參數(shù)
if($this->parameters["title"] == null)
{
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)名稱title!"."<br>");
}elseif ($this->parameters["desc"] == null ) {
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)描述desc!"."<br>");
}elseif ($this->parameters["begin_time"] == null) {
throw new SDKRuntimeException("缺少活動(dòng)開始時(shí)間 begin_time!"."<br>");
}elseif ($this->parameters["expire_time"] == null) {
throw new SDKRuntimeException("缺少活動(dòng)結(jié)束時(shí)間 expire_time!"."<br>");
}elseif ($this->parameters["total"] == null) {
throw new SDKRuntimeException("缺少紅包總數(shù)total!"."<br>");
}elseif ($this->parameters["jump_url"] == null) {
throw new SDKRuntimeException("缺少紅包關(guān)注跳轉(zhuǎn)連接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';//開啟活動(dòng)
$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);//發(fā)送一個(gè)常規(guī)的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的數(shù)據(jù)包
$rv = curl_exec($curl);//輸出內(nèi)容
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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置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)
{
//設(shè)置接口鏈接
$this->url = "https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=".$access_token;
//設(shè)置curl超時(shí)時(shí)間
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口參數(shù) json
*/
function createJson()
{
try
{
//檢測必填參數(shù)
if($this->parameters["lottery_id"] == null)
{
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)id lottery_id !"."<br>");
}else if(empty($this->parameters["prize_info_list"])){
throw new SDKRuntimeException("缺少抽獎(jiǎng)活動(dòng)紅包 prize_info_list !"."<br>");
}
$this->parameters["mchid"] = WxPayConf_pub::MCHID;//授權(quán)商戶號
$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授權(quán)上號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);//發(fā)送一個(gè)常規(guī)的Post請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的數(shù)據(jù)包
$rv = curl_exec($curl);//輸出內(nèi)容
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();
//設(shè)置超時(shí)
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);
//運(yùn)行curl,結(jié)果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:設(shè)置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}
?>
以上內(nèi)容比較長,希望大家在閱讀的使用有點(diǎn)耐心,本文寫的還算不錯(cuò)嘀,自我感覺良好吧,呵呵。使用PHP實(shí)現(xiàn)微信搖一搖周邊紅包相關(guān)內(nèi)容就先給大家介紹到這里,希望對大家有所幫助。
相關(guān)文章
laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng)簡單demo示例
這篇文章主要介紹了laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng),結(jié)合實(shí)例形式詳細(xì)分析了laravel5.6郵件隊(duì)列database驅(qū)動(dòng)具體設(shè)置、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
Zend Framework教程之Application和Bootstrap用法詳解
這篇文章主要介紹了Zend Framework教程之Application和Bootstrap用法,結(jié)合實(shí)例形式詳細(xì)分析了Application和Bootstrap的功能,使用技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-03-03
如何用PHP來實(shí)現(xiàn)一個(gè)動(dòng)態(tài)Web服務(wù)器
這篇文章介紹了如何用PHP來實(shí)現(xiàn)一個(gè)動(dòng)態(tài)Web服務(wù)器,文章思路清晰,并附有演示代碼地址,需要的朋友可以參考下2015-07-07
thinkphp3.2實(shí)現(xiàn)在線留言提交驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了TP3.2寫提交的驗(yàn)證碼驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
基于PHP實(shí)現(xiàn)商品成交時(shí)發(fā)送短信功能
這篇文章主要介紹了基于PHP實(shí)現(xiàn)商品成交時(shí)發(fā)送短信的功能,代碼簡單易懂,需要的朋友可以參考下2016-05-05




