国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

微信搖一搖周邊紅包

2019-11-14 13:19:47
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

早上老大扔了個(gè)設(shè)備來(lái)說(shuō)要做個(gè)搖一搖紅包  就上網(wǎng)找了下 強(qiáng)大的度娘都找不到大神們分享出來(lái)的源碼 只能自己埋頭去寫寫了

微信官方說(shuō)明如下

搖一搖紅包說(shuō)明

功能說(shuō)明

搖一搖周邊紅包接口是為線下商戶提供的發(fā)紅包功能。用戶可以在商家門店等線下場(chǎng)所通過(guò)搖一搖周邊領(lǐng)取商家發(fā)放的紅包,在線上轉(zhuǎn)發(fā)分享無(wú)效。

開發(fā)者可通過(guò)接口開發(fā)搖一搖紅包功能,特點(diǎn)包括:

  1. 可選擇使用模板加載頁(yè)或自定義Html5頁(yè)面調(diào)起微信原生紅包頁(yè)面(詳見創(chuàng)建紅包活動(dòng)中use_template字段,1為使用模板,2為使用自定義Html5頁(yè)面)
  2. 原生紅包頁(yè)面拆紅包,無(wú)需通過(guò)公眾號(hào)消息下發(fā)
  3. 提供關(guān)注公眾號(hào)能力,用戶可自行選擇是否關(guān)注(裂變紅包分享時(shí)無(wú)效)
  4. 完成頁(yè)面可配置跳轉(zhuǎn)鏈接,可跳轉(zhuǎn)商戶的其他自定義Html5頁(yè)面
  5. 同一個(gè)用戶在單個(gè)紅包活動(dòng)中只能領(lǐng)取1次紅包


用戶側(cè)交互流程

流程圖1.jpg
流程圖2.jpg

紅包組件接口調(diào)用流程

  1. 申請(qǐng)紅包接口權(quán)限:登錄搖一搖周邊商戶后臺(tái)https://zb.weixin.QQ.com ,進(jìn)入開發(fā)者支持,申請(qǐng)開通搖一搖紅包組件接口;
  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抽紅包:在搖出的頁(yè)面中通過(guò)調(diào)用jsapi抽紅包,抽中紅包的用戶可以拆紅包;
  5. 調(diào)用以上接口時(shí),紅包提供商戶和紅包發(fā)放商戶公眾號(hào)要求一致。
 說(shuō)明:  紅包提供商戶:紅包預(yù)下單接口傳入的參數(shù)wxappid所代表的商戶  紅包發(fā)放商戶:調(diào)用紅包接口創(chuàng)建紅包活動(dòng)、錄入紅包信息、發(fā)放紅包的商戶公眾號(hào)

所以步驟應(yīng)該是 ① 創(chuàng)建紅包活動(dòng) ② 預(yù)下單 ③ 錄入紅包
找出來(lái)了之前整理的類 在寫一下

1.創(chuàng)建活動(dòng)

接口說(shuō)明

創(chuàng)建紅包活動(dòng),設(shè)置紅包活動(dòng)有效期,紅包活動(dòng)開關(guān)等基本信息,返回活動(dòng)id

接口調(diào)用說(shuō)明

服務(wù)器端調(diào)用http請(qǐng)求方式: POSTURL: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=LOGO_URL

請(qǐng)求參數(shù)說(shuō)明

參數(shù)類型說(shuō)明
access_tokenstringaccesstoken,以參數(shù)的形式拼裝在url后
use_templateint是否使用模板,1:使用,2:不使用,以參數(shù)的形式拼裝在url后。(模版即交互流程圖中的紅包加載頁(yè),使用模板用戶不需要點(diǎn)擊可自動(dòng)打開紅包;不使用模版需自行開發(fā)HTML5頁(yè)面,并在頁(yè)面調(diào)用紅包jsapi)
logo_urlstring使用模板頁(yè)面的logo_url,不使用模板時(shí)可不加。展示在搖一搖界面的消息圖標(biāo)。圖片尺寸為120x120。

POST BODY:JSON格式的結(jié)構(gòu)體

參數(shù)類型說(shuō)明
titlestring抽獎(jiǎng)活動(dòng)名稱(選擇使用模板時(shí),也作為搖一搖消息主標(biāo)題),最長(zhǎng)6個(gè)漢字,12個(gè)英文字母。
descstring抽獎(jiǎng)活動(dòng)描述(選擇使用模板時(shí),也作為搖一搖消息副標(biāo)題),最長(zhǎng)7個(gè)漢字,14個(gè)英文字母。
onoffint抽獎(jiǎng)開關(guān)。0關(guān)閉,1開啟,默認(rèn)為1
begin_timelong抽獎(jiǎng)活動(dòng)開始時(shí)間,unix時(shí)間戳,單位秒
expire_timelong抽獎(jiǎng)活動(dòng)結(jié)束時(shí)間,unix時(shí)間戳,單位秒,紅包活動(dòng)有效期最長(zhǎng)為91天
sponsor_appidstring紅包提供商戶公眾號(hào)的appid,需與預(yù)下單中的公眾賬號(hào)appid(wxappid)一致
totallong紅包總數(shù),紅包總數(shù)是錄入紅包ticket總數(shù)的上限,因此紅包總數(shù)應(yīng)該大于等于預(yù)下單時(shí)紅包ticket總數(shù)。
jump_urlstring紅包關(guān)注界面后可以跳轉(zhuǎn)到第三方自定義的頁(yè)面
keystring開發(fā)者自定義的key,用來(lái)生成活動(dòng)抽獎(jiǎng)接口的簽名參數(shù),長(zhǎng)度32位。使用方式見sign生成規(guī)則

請(qǐng)求示例

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ù)說(shuō)明

參數(shù)類型說(shuō)明
errcodeint錯(cuò)誤碼。0為成功,其他為失敗。詳細(xì)請(qǐng)參考錯(cuò)誤碼表
errmsgstring錯(cuò)誤信息
lottery_idstring生成的紅包活動(dòng)id
page_idint生成的模板頁(yè)面ID

示例

{      "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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)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請(qǐng)求    	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;	}	/**	 * 	作用:通過(guò)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

 前端頁(yè)面隨便做一下

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ù)庫(kù)
            
	        }else{	        	//echo '創(chuàng)建活動(dòng)失敗:'.$result['errmsg'];	        	//這里是錯(cuò)誤提示	        }          

 

2.預(yù)下單

接口說(shuō)明

設(shè)置單個(gè)紅包的金額,類型等,生成紅包信息。預(yù)下單完成后,需要在72小時(shí)內(nèi)調(diào)用jsapi完成抽紅包的操作。(紅包過(guò)期失效后,資金會(huì)退回到商戶財(cái)付通帳號(hào)。)

接口調(diào)用說(shuō)明

服務(wù)器端調(diào)用http請(qǐng)求方式: POSThttps://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorderPOST數(shù)據(jù)格式:XML需要商戶證書

請(qǐng)求參數(shù)說(shuō)明

參數(shù)字段是否必須示例值類型說(shuō)明
隨機(jī)字符串nonce_str5K8264ILTKCH16CQ2502SI8Z

NMTM67VS

String(32)隨機(jī)字符串,不長(zhǎng)于32位
簽名signC380BEC2BFD727A4B68451335

19F3AD6

String(32)生成簽名方式查看簽名算法
商戶訂單號(hào)mch_billno10000098201411111234567890String(28)商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一)組成: mch_id+yyyymmdd+10位一天內(nèi)不能重復(fù)的數(shù)字。接口根據(jù)商戶訂單號(hào)支持重入, 如出現(xiàn)超時(shí)可再調(diào)用。
商戶號(hào)mch_id10000098String(32)紅包提供者的商戶號(hào)(微信支付分配的商戶號(hào))
公眾賬號(hào)appidwxappidwx8888888888888888String(32)紅包提供者公眾號(hào)的appid,對(duì)應(yīng)頭像展示在紅包頁(yè)面
商戶名稱send_name天虹百貨String(32)紅包提供者名稱,展示在紅包頁(yè)面
紅包類型hb_typeNORMALString(16)NORMAL-普通紅包;GROUP-裂變紅包(可分享紅包給好友,無(wú)關(guān)注公眾號(hào)能力)。
總金額total_amount1000int總付款金額,單位分
紅包發(fā)放總?cè)藬?shù)total_num1int紅包發(fā)放總?cè)藬?shù),即總共有多少人可以領(lǐng)到該組紅包(包括分享者)。普通紅包填1,裂變紅包必須大于1。
紅包金額設(shè)置方式amt_typeALL_RANDString(32)紅包金額設(shè)置方式,只對(duì)裂變紅包生效。ALL_RAND—全部隨機(jī)
紅包祝福語(yǔ)wishing感謝您參加猜燈謎活動(dòng),祝您元宵節(jié)快樂(lè)String(16)紅包祝福語(yǔ),展示在紅包頁(yè)面
活動(dòng)名稱act_name猜燈謎搶紅包活動(dòng)String(32)活動(dòng)名稱,在不支持原生紅包的微信版本中展示在紅包消息
備注remark猜越多得越多,快來(lái)?yè)專?/td>String(32)備注信息,在不支持原生紅包的微信版本中展示在紅包消息
授權(quán)商戶號(hào)auth_mchid1000052601String(32)用于發(fā)紅包時(shí)微信支付識(shí)別搖周邊紅包,所有開發(fā)者統(tǒng)一填寫搖周邊平臺(tái)的商戶號(hào):1000052601
授權(quán)商戶APPIDauth_appidwxbf42bd79c4391863String(32)用于發(fā)紅包時(shí)微信支付識(shí)別搖周邊紅包,所有開發(fā)者統(tǒng)一填寫搖周邊平臺(tái)的appid:wxbf42bd79c4391863
風(fēng)控設(shè)置risk_cntlNORMALString(32)用于管控接口風(fēng)險(xiǎn)。具體值如下:NORMAL—正常情況;IGN_FREQ_LMT—忽略防刷限制,強(qiáng)制發(fā)放;IGN_DAY_LMT—忽略單用戶日限額 限制,強(qiáng)制發(fā)放;IGN_FREQ_DAY_LMT—忽略防刷和單用戶日限額限制,強(qiáng)制發(fā)放;如無(wú)特殊要求,請(qǐng)?jiān)O(shè)為NORMAL。若忽略某項(xiàng)風(fēng)險(xiǎn)控制,可 能造成資金損失,請(qǐng)謹(jǐn)慎使用。

請(qǐng)求示例

<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ù)說(shuō)明

返回格式為xml

參數(shù)字段是否必須示例值類型說(shuō)明
返回狀態(tài)碼return_codeSUCCESSString(16)SUCCESS/FAIL;此字段是通信標(biāo)識(shí),非交易標(biāo)識(shí),交易是否成功需要查看result_code來(lái)判斷
返回信息return_msg簽名失敗String(128)返回信息,如非空,為錯(cuò)誤原因 簽名失敗 參數(shù)格式校驗(yàn)錯(cuò)誤

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

參數(shù)字段是否必須示例值類型說(shuō)明
簽名signC380BEC2BFD727A4B6845133519F3AD6String(32)生成簽名方式查看 簽名算法
業(yè)務(wù)結(jié)果result_codeSUCCESSString(16)SUCCESS/FAIL
錯(cuò)誤代碼err_codeSUCCESSString(32)錯(cuò)誤碼信息
錯(cuò)誤代碼描述err_code_des系統(tǒng)錯(cuò)誤String(128)結(jié)果信息描述

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

參數(shù)字段是否必須示例值類型說(shuō)明
商戶訂單號(hào)mch_billno10000098201411111234567890String(28)商戶訂單號(hào)(每個(gè)訂單號(hào)必須唯一)組成: mch_id+yyyymmdd+10位一天內(nèi)不能重復(fù)的數(shù)字。
商戶號(hào)mch_id10000098String(32)微信支付分配的商戶號(hào)
公眾賬號(hào)appidwxappidwx8888888888888888String(32)商戶appid
總金額total_amount1000int總付款金額,單位分
ticketsp_ticket2J6MtR+SlbZ8Ga4EDi64X5

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

Stringsp_ticket,一個(gè)普通紅包對(duì)應(yīng)一個(gè)ticket
紅包訂單號(hào)detail_id0000000666201504290000042120 紅包內(nèi)部訂單號(hào)
發(fā)送時(shí)間 20150429203444 紅包發(fā)放時(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)繁忙,請(qǐng)稍后再試.]]></return_msg> 	<result_code><![CDATA[FAIL]]></result_code> 	<err_code><![CDATA[268458547]]></err_code> 	<err_code_des><![CDATA[系統(tǒng)繁忙,請(qǐ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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID			$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)			$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串			//$this->parameters["re_openid"] = $this->openid;//用戶openid			$this->parameters["hb_type"] = 'NORMAL';//紅包類型 NORMAL-普通紅包;GROUP-裂變紅包(可分享紅包給好友,無(wú)關(guān)注公眾號(hào)能力)。 			$this->parameters["auth_mchid"] = '1000052601';//搖周邊商戶號(hào)			$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;	}	/**	 * 	作用:通過(guò)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 和商戶號(hào)



調(diào)用 (這里不貼前端頁(yè)面了)
       $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);        //紅包祝福語(yǔ)        $Redpack->setParameter('wishing', "搖一搖送紅包");        //活動(dòng)名稱        $Redpack->setParameter('act_name', "搖一搖送紅包");        //備注        $Redpack->setParameter('remark', "搖一搖送紅包 備注");        $result = $Redpack->hbpreorder();        if($result[''])

 



3.錄入紅包

接口說(shuō)明

在調(diào)用"創(chuàng)建紅包活動(dòng)"接口之后,調(diào)用此接口錄入紅包信息。注意,此接口每次調(diào)用,都會(huì)向某個(gè)活動(dòng)新增一批紅包信息,如果紅包數(shù)少于100 個(gè),請(qǐng)通過(guò)一次調(diào)用添加所有紅包信息。如果紅包數(shù)大于100,可以多次調(diào)用接口添加。請(qǐng)注意確保多次錄入的紅包ticket總的數(shù)目不大于創(chuàng)建該紅包活動(dòng) 時(shí)設(shè)置的total值。

接口調(diào)用說(shuō)明

服務(wù)器端調(diào)用http請(qǐng)求方式: POSTURL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN

請(qǐng)求參數(shù)說(shuō)明

參數(shù)類型說(shuō)明
access_tokenstringaccesstoken,以參數(shù)的形式拼裝在url后

POST BODY:JSON格式的結(jié)構(gòu)體

參數(shù)類型說(shuō)明
lottery_idstring紅包抽獎(jiǎng)id,來(lái)自addlotteryinfo返回的lottery_id
mchidstring紅包提供者的商戶號(hào),,需與預(yù)下單中的商戶號(hào)mch_id一致
sponsor_appidstring紅包提供商戶公眾號(hào)的appid,需與預(yù)下單中的公眾賬號(hào)appid(wxappid)一致
prize_info_listjson數(shù)組紅包ticket列表,如果紅包數(shù)較多,可以一次傳入多個(gè)紅包,批量調(diào)用該接口設(shè)置紅包信息。每次請(qǐng)求傳入的紅包個(gè)數(shù)上限為100
ticketstring預(yù)下單時(shí)返回的紅包ticket,單個(gè)活動(dòng)紅包ticket數(shù)量上限為100000個(gè),可添加多次。

請(qǐng)求示例

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ù)說(shuō)明

參數(shù)類型說(shuō)明
errcodeint錯(cuò)誤碼。0為成功,其他為失敗。詳細(xì)請(qǐng)參考錯(cuò)誤碼表
errmsgstring錯(cuò)誤信息
repeat_ticket_listarray重復(fù)使用的ticket列表,如為空,將不返回
expire_ticket_listarray過(guò)期的ticket列表,如為空,將不返回
invalid_amount_ticket_listarray金額不在大于1元,小于1000元的ticket列表,如為空,將不返回
success_numint成功錄入的紅包數(shù)量
wrong_authmchid_ticket_listarray原因:生成紅包的時(shí)候,授權(quán)商戶號(hào)auth_mchid和auth_appid沒有寫搖周邊的商戶號(hào)
invalid_ticket_listarrayticket解析失敗,可能有錯(cuò)別字符或不完整

示例

{	     "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		{			//檢測(cè)必填參數(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)商戶號(hào)			$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授權(quán)上號(hào)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請(qǐng)求    	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;	}	/**	 * 	作用:通過(guò)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)用
     
    $token = getAccessToken();
    $Redpack = new /lottery_pub($token);
    $lottery_id = ''; //這里讀取數(shù)據(jù)庫(kù)取出創(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();

 

搶紅包頁(yè)面  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頁(yè)面

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

 

紅包綁定用戶事件通知     

接口說(shuō)明

用戶進(jìn)入紅包頁(yè)面時(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)入紅包頁(yè)面后,有可能不拆紅包,但該紅包ticket已被綁定,不能再被其他用戶綁定,過(guò)期后會(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ù)庫(kù)		}else if.......其他的事件......	}

 完畢了.時(shí)間比較匆忙 也沒時(shí)間做優(yōu)化 大神經(jīng)過(guò)順便指導(dǎo)12  我好搓的英文基礎(chǔ)

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

<?php/** * 微信支付幫助庫(kù) * ==================================================== * 接口分三種類型: * 【請(qǐng)求型接口】--Wxpay_client_ * 		統(tǒng)一支付接口類--UnifiedOrder * 		訂單查詢接口--OrderQuery * 		退款申請(qǐng)接口--Refund * 		退款查詢接口--RefundQuery * 		對(duì)賬單接口--DownloadBill * 		短鏈接轉(zhuǎn)換接口--ShortUrl * 【響應(yīng)型接口】--Wxpay_server_ * 		通用通知接口--Notify * 		Native支付——請(qǐng)求商家獲取商品信息接口--NativeCall * 【其他】 * 		靜態(tài)鏈接二維碼--NativeLink * 		JSAPI支付--JsApi * ===================================================== * 【CommonUtil】常用工具: * 		trimString(),設(shè)置參數(shù)時(shí)需要用到的字符處理函數(shù) * 		createNoncestr(),產(chǎn)生隨機(jī)字符串,不長(zhǎng)于32位 * 		formatBizQueryParaMap(),格式化參數(shù),簽名過(guò)程需要用到 * 		getSign(),生成簽名 * 		arrayToXml(),array轉(zhuǎn)xml * 		xmlToArray(),xml轉(zhuǎn) array * 		postXmlCurl(),以post方式提交xml到對(duì)應(yīng)的接口url * 		postXmlSSLCurl(),使用證書,以post方式提交xml到對(duì)應(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ī)字符串,不長(zhǎng)于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ù),簽名過(guò)程需要使用	 */	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到對(duì)應(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到對(duì)應(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根證書(用來(lái)驗(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>');	}}/** * 請(qǐng)求型接口的基類 */class Wxpay_client_pub extends Common_util_pub {	var $parameters;//請(qǐng)求參數(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è)置請(qǐng)求參數(shù)	 */	function setParameter($parameter, $parameterValue)	{		$this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue);	}		/**	 * 	作用:設(shè)置標(biāo)配的請(qǐng)求參數(shù),生成簽名,生成接口參數(shù)xml	 */	function createXml()	{	   	$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號(hào)ID	   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)	    $this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串	    $this->parameters["sign"] = $this->getSign($this->parameters);//簽名	    return  $this->arrayToXml($this->parameters);	}		/**	 * 	作用:post請(qǐng)求xml	 */	function postXml()	{	    $xml = $this->createXml();		$this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout);		return $this->response;	}		/**	 * 	作用:使用證書post請(qǐng)求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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		   	$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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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());		}	}}/** * 退款申請(qǐng)接口 */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		{			//檢測(cè)必填參數(shù)			if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) {				throw new SDKRuntimeException("退款申請(qǐng)接口中,out_trade_no、transaction_id至少填一個(gè)!"."<br>");			}elseif($this->parameters["out_refund_no"] == null){				throw new SDKRuntimeException("退款申請(qǐng)接口中,缺少必填參數(shù)out_refund_no!"."<br>");			}elseif($this->parameters["total_fee"] == null){				throw new SDKRuntimeException("退款申請(qǐng)接口中,缺少必填參數(shù)total_fee!"."<br>");			}elseif($this->parameters["refund_fee"] == null){				throw new SDKRuntimeException("退款申請(qǐng)接口中,缺少必填參數(shù)refund_fee!"."<br>");			}elseif($this->parameters["op_user_id"] == null){				throw new SDKRuntimeException("退款申請(qǐng)接口中,缺少必填參數(shù)op_user_id!"."<br>");			}		   	$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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;	}}/** * 對(duì)賬單接口 */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("對(duì)賬單接口中,缺少必填參數(shù)bill_date!"."<br>");			}		   	$this->parameters["appid"] = WxPayConf_pub::APPID;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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ù)組		/**	 * 將微信的請(qǐng)求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;	}		/**	 * 獲取微信的請(qǐng)求數(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 {}/** * 請(qǐng)求商家獲取商品信息接口 */class NativeCall_pub extends Wxpay_server_pub{	/**	 * 生成接口參數(shù)xml	 */	function createXml()	{		if($this->returnParameters["return_code"] == "SUCCESS"){		   	$this->returnParameters["appid"] = WxPayConf_pub::APPID;//公眾賬號(hào)ID		   	$this->returnParameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		    $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;//公眾賬號(hào)ID		   	$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)		   	$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)頁(yè)端調(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;	}			/**	 * 	作用:通過(guò)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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID			$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)			$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;	}		/**	 * 	作用:通過(guò)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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID			$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)			$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;	}	/**	 * 	作用:通過(guò)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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)ID			$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商戶號(hào)			$this->parameters["nonce_str"] = $this->createNoncestr();//隨機(jī)字符串			//$this->parameters["re_openid"] = $this->openid;//用戶openid			$this->parameters["hb_type"] = 'NORMAL';//紅包類型 NORMAL-普通紅包;GROUP-裂變紅包(可分享紅包給好友,無(wú)關(guān)注公眾號(hào)能力)。 			$this->parameters["auth_mchid"] = '1000052601';//搖周邊商戶號(hào)			$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;	}	/**	 * 	作用:通過(guò)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		{			//檢測(cè)必填參數(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;//公眾賬號(hào)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請(qǐng)求    	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;	}	/**	 * 	作用:通過(guò)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		{			//檢測(cè)必填參數(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)商戶號(hào)			$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授權(quán)上號(hào)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請(qǐng)求    	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;	}	/**	 * 	作用:通過(guò)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_;	}}?>

 





發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阳朔县| 泰安市| 盈江县| 三明市| 江西省| 建水县| 普定县| 修武县| 宜君县| 永靖县| 息烽县| 宁强县| 郑州市| 徐水县| 岑溪市| 崇明县| 同心县| 林甸县| 固始县| 铁岭县| 启东市| 瓦房店市| 淳安县| 吕梁市| 德惠市| 翼城县| 安宁市| 遂溪县| 尉氏县| 西青区| 马龙县| 伊春市| 内黄县| 宁南县| 翼城县| 阿拉善左旗| 潞西市| 田东县| 榆树市| 白山市| 边坝县|