ホームページ > php教程 > php手册 > WeChatで周囲の赤い封筒を振る、周囲の赤い封筒を振る

WeChatで周囲の赤い封筒を振る、周囲の赤い封筒を振る

WBOY
リリース: 2016-06-16 09:16:28
オリジナル
1397 人が閲覧しました

WeChat で周辺の赤い封筒を振る、周辺の赤い封筒を振る

朝、上司がデバイスを投げて赤い封筒を振りたいと言ったので、オンラインで検索しました強力なDu Niangdu マスターが共有したソースコードが見つからなかったので、私はそれを書くのに没頭しなければなりませんでした

WeChatの公式説明は次のとおりです

赤い封筒を振る手順

機能の説明

周囲の赤い封筒を振るインターフェイスは、オフラインの加盟店向けに提供される赤い封筒の送信機能です。ユーザーは加盟店などのオフラインの場所で周囲を振ることで加盟店が発行する赤い封筒を受け取ることができます。オンライン転送や共有は無効です。

開発者は、インターフェイスを通じてシェイクレッドエンベロープ機能を開発できます。


ユーザー側の対話プロセス

赤い封筒コンポーネントインターフェース呼び出しプロセス

 说明:
  红包提供商户:红包预下单接口传入的参数wxappid所代表的商户
  红包发放商户:调用红包接口创建红包活动、录入红包信息、发放红包的商户公众号<br /><br />所以步骤应该是 ① 创建红包活动 ② 预下单 ③ 录入红包<br />找出来了之前整理的类 在写一下<br /><br /><span><strong>1.创建活动<br /></strong></span>
ログイン後にコピー

インターフェースの説明

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

赤い封筒アクティビティを作成し、赤い封筒アクティビティの有効期間、赤い封筒アクティビティのスイッチ、その他の基本情報を設定し、アクティビティ ID を返します

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

インターフェース呼び出し手順

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
服务器端调用
http请求方式: POST
URL: https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=ACCESSTOKEN&use_template=1&logo_url=LOGO_URL
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

リクエストパラメータの説明

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

POST BODY: JSON 形式の構造

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

リクエスト例

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
Content-Type: application/json Post Body:
{                                                            
 "title": "title",                           
 "desc": "desc",                             
 "onoff": 1,                                 
 "begin_time": 1428854400,                            
 "expire_time": 1428940800,                           
 "sponsor_appid": "wxxxxxxxxxxxxxx",
 "total": 10,
 "jump_url": JUMP_URL,     
 "key": "keyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"                            
}
 
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

戻りデータの説明

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
参数类型说明
errcode int 错误码。0为成功,其他为失败。详细请参考错误码表
errmsg string 错误信息
lottery_id string 生成的红包活动id
page_id int 生成的模板页面ID
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

示例

ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
{     
 "errcode":0,     
 "errmsg":"",     
 "lottery_id":"xxxxxxllllll", 
 "page_id":1, 
}
ログイン後にコピー
<span><strong><br /><span></span></strong></span>
ログイン後にコピー
/**
 * 摇一摇红包 创建活动
 * @author jiosen
 */
class addlotteryinfo_pub extends Wxpay_client_pub
{
	var $code;//code码,用以获取openid
	var $openid;//用户的openid

	function __construct($access_token,$logo)
	{
		//设置接口链接
		$this->url = "https://api.weixin.qq.com/shakearound/lottery/addlotteryinfo?access_token=".$access_token."&use_template=1&logo_url=".$logo;
		//设置curl超时时间
		$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
	}

	/**
	 * 生成接口参数  json
	 */
	function createJson()
	{
		try
		{
			//检测必填参数
			if($this->parameters["title"] == null)
			{
				throw new SDKRuntimeException("缺少抽奖活动名称title!"."<br>");
			}elseif ($this->parameters["desc"] == null ) {
				throw new SDKRuntimeException("缺少抽奖活动描述desc!"."<br>");
			}elseif ($this->parameters["begin_time"] == null) {
				throw new SDKRuntimeException("缺少活动开始时间 begin_time!"."<br>");
			}elseif ($this->parameters["expire_time"] == null) {
				throw new SDKRuntimeException("缺少活动结束时间 expire_time!"."<br>");
			}elseif ($this->parameters["total"] == null) {
				throw new SDKRuntimeException("缺少红包总数total!"."<br>");
			}elseif ($this->parameters["jump_url"] == null) {
				throw new SDKRuntimeException("缺少红包关注跳转连接jump_url!"."<br>");
			}elseif ($this->parameters["key"] == null) {
				throw new SDKRuntimeException("缺少红包key!"."<br>");
			}
			$this->parameters["title"] = urlencode($this->parameters["title"]);
			$this->parameters["desc"] = urlencode($this->parameters["desc"]);
			$this->parameters["onoff"] = '1';//开启活动
			$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//公众账号ID
			//var_dump($this->parameters);
			//echo json_encode($this->parameters);
			return  json_encode($this->parameters);
		}catch (SDKRuntimeException $e)
		{
			die($e->errorMessage());
		}
	}


	function hbpreorder()
	{
		$data = $this->createJson();
		$result = $this->curl_post($this->url,urldecode($data));
		$result = json_decode($result);
		return $result;
	}

	function curl_post($url,$data)
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POST, 1);//发送一个常规的Post请求
    	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的数据包
        $rv = curl_exec($curl);//输出内容
        curl_close($curl);
        return $rv;
    }

	/**
	 * 	作用:生成可以获得code的url
	 */
	function createOauthUrlForCode($redirectUrl)
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["redirect_uri"] = "$redirectUrl";
		$urlObj["response_type"] = "code";
		$urlObj["scope"] = "snsapi_base";
		$urlObj["state"] = "STATE"."#wechat_redirect";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
	}



	/**
	 * 	作用:生成可以获得openid的url
	 */
	function createOauthUrlForOpenid()
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["secret"] = WxPayConf_pub::APPSECRET;
		$urlObj["code"] = $this->code;
		$urlObj["grant_type"] = "authorization_code";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
	}

	/**
	 * 	作用:通过curl向微信提交code,以获取openid
	 */
	function getOpenid()
	{
		$url = $this->createOauthUrlForOpenid();
		//初始化curl
		$ch = curl_init();
		//设置超时
		curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		//运行curl,结果以jason形式返回
		$res = curl_exec($ch);
		curl_close($ch);
		$data = json_decode($res,true);
		$this->openid = $data['openid'];
		return $this->openid;
	}

	/**
	 * 	作用:设置code
	 */
	function setCode($code_)
	{
		$this->code = $code_;
	}

}
ログイン後にコピー

要注意提交的数据是json 不是xml

前端页面随便做一下

php 代码

                     $title = $_POST['title'];
		     $file = $_FILES['img'];
		     $tools = new Tools(); //这是一个文件上传类 随意选择一样你喜欢的上传方式
		     $logo_url = $tools->_upload_award("poll_img", $file, time()); 
		     $description = $_POST['description'];
		     $total = $_POST['total'];
		     $jump_url = $_POST['jump_url'];
		     $token = getAccessToken();   //这里是我封装的一个获取 token的 方法  做了时间限制 防止超出调用次数

	           $Redpack = new addlotteryinfo_pub($token,SITE_URL.$logo_url);
	           $time = time();
	           $end = time()+60*24*60*60;//两个月  这里的开始和结束时间我固定了 
	          $key = $Redpack->createNoncestr(); //key
	         $Redpack->setParameter('title', $title);
	        //活动标题
	        $Redpack->setParameter('desc', $description);
	        //活动描述
	        $Redpack->setParameter('begin_time', $time);
	        //开始时间
	        $Redpack->setParameter('expire_time', $end); 
	        //结束时间
	        $Redpack->setParameter('total', $total);
	        //红包总数
	        $Redpack->setParameter('jump_url', $jump_url);
	        //key
	        $Redpack->setParameter('key', $key);
	        $result = $Redpack->hbpreorder();
	        $result = (array)$result; 
	        if($result['errcode']==0){
	          	$lottery_id = $result['lottery_id'];
	        	$page_id = $result['page_id'];
	        	//这里记得存一下数据库;
ログイン後にコピー
            
	        }else{
	        	//echo '创建活动失败:'.$result['errmsg'];
	        	//这里是错误提示
	        }          
ログイン後にコピー

<span><strong>2.预下单</strong></span>
ログイン後にコピー

接口说明

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

接口调用说明

服务器端调用
http请求方式: POST
https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder
POST数据格式:XML
需要商户证书
ログイン後にコピー

请求参数说明

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

NMTM67VS

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

19F3AD6

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

请求示例

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

返回数据说明

返回格式为xml

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

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

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

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

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

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

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

成功示例

<xml> 	
<return_code><![CDATA[SUCCESS]]></return_code> 	
<return_msg><![CDATA[发放成功.]]></return_msg> 
<result_code><![CDATA[SUCCESS]]></result_code> 
<err_code><![CDATA[0]]></err_code> 	
<err_code_des><![CDATA[发放成功.]]></err_code_des> 	
<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno> 
<mch_id>10010404</mch_id> 	
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid> 	
<sp_ticket><![CDATA[0cca98c8c8e814883]]></sp_ticket> 
<total_amount>3</total_amount> 	
<detail_id><![CDATA[001001040420141117000004888]]></detail_id> 
<send_time><![CDATA[20150101080000]]></send_time> 
</xml>  
ログイン後にコピー

失败示例

<xml>     
<return_code><![CDATA[FAIL]]></return_code> 	
<return_msg><![CDATA[系统繁忙,请稍后再试.]]></return_msg> 	
<result_code><![CDATA[FAIL]]></result_code> 	
<err_code><![CDATA[268458547]]></err_code> 	
<err_code_des><![CDATA[系统繁忙,请稍后再试.]]></err_code_des> 	
<mch_billno><![CDATA[0010010404201411170000046542]]></mch_billno> 	        
<mch_id>10010404</mch_id> 	
<wxappid><![CDATA[wx6fa7e3bab7e15415]]></wxappid> 	 
<total_amount>3</total_amount> 
</xml>
ログイン後にコピー
/**
 * 摇一摇红包预下单 
 * @author jiosen
 */
class Yhb_pub extends Wxpay_client_pub
{
	var $code;//code码,用以获取openid
	var $openid;//用户的openid

	function __construct()
	{
		//设置接口链接
		$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/hbpreorder";
		//设置curl超时时间
		$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
	}

	/**
	 * 生成接口参数xml
	 */
	function createXml()
	{
		try
		{
			//检测必填参数
			if($this->parameters["mch_billno"] == null)
			{
				throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");
			}elseif ($this->parameters["send_name"] == null ) {
				throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");
			}elseif ($this->parameters["total_amount"] == null) {
				throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");
			}elseif ($this->parameters["total_num"] == null) {
				throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");
			}elseif ($this->parameters["wishing"] == null) {
				throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");
			}elseif ($this->parameters["act_name"] == null) {
				throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");
			}elseif ($this->parameters["remark"] == null) {
				throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");
			}
			$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID
			$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号
			$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
			//$this->parameters["re_openid"] = $this->openid;//用户openid
			$this->parameters["hb_type"] = 'NORMAL';//红包类型 NORMAL-普通红包;GROUP-裂变红包(可分享红包给好友,无关注公众号能力)。 
			$this->parameters["auth_mchid"] = '1000052601';//摇周边商户号
			$this->parameters["auth_appid"] = 'wxbf42bd79c4391863';//摇周边 appid
			$this->parameters["risk_cntl"] = 'NORMAL';//风控设置
			$this->parameters["sign"] = $this->getSign($this->parameters);//签名
			return  $this->arrayToXml($this->parameters);
		}catch (SDKRuntimeException $e)
		{
			die($e->errorMessage());
		}
	}


	function hbpreorder()
	{
		$this->postXmlSSL();
		$this->result = $this->xmlToArray($this->response);
		return $this->result;
	}



	/**
	 * 	作用:生成可以获得code的url
	 */
	function createOauthUrlForCode($redirectUrl)
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["redirect_uri"] = "$redirectUrl";
		$urlObj["response_type"] = "code";
		$urlObj["scope"] = "snsapi_base";
		$urlObj["state"] = "STATE"."#wechat_redirect";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
	}



	/**
	 * 	作用:生成可以获得openid的url
	 */
	function createOauthUrlForOpenid()
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["secret"] = WxPayConf_pub::APPSECRET;
		$urlObj["code"] = $this->code;
		$urlObj["grant_type"] = "authorization_code";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
	}

	/**
	 * 	作用:通过curl向微信提交code,以获取openid
	 */
	function getOpenid()
	{
		$url = $this->createOauthUrlForOpenid();
		//初始化curl
		$ch = curl_init();
		//设置超时
		curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		//运行curl,结果以jason形式返回
		$res = curl_exec($ch);
		curl_close($ch);
		//取出openid
		$data = json_decode($res,true);
		$this->openid = $data['openid'];
		return $this->openid;
	}

	/**
	 * 	作用:设置code
	 */
	function setCode($code_)
	{
		$this->code = $code_;
	}

}
ログイン後にコピー

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

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

<br /><br />
ログイン後にコピー
<span><strong>3.录入红包</strong></span>
ログイン後にコピー

接口说明

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

接口调用说明

服务器端调用
http请求方式: POST
URL:https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=ACCESSTOKEN
ログイン後にコピー

请求参数说明

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

POST BODY:JSON格式的结构体

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

请求示例

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

返回数据说明

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

示例

{	     
"errcode":0,     
"errmsg":"",     
"repeat_ticket_list":[         
     {            
"ticket": "v1|ZiPs2l0hpMBp3uwGI1rwp45vOdz/V/zQ/00jP9MeWT+e47/q1FJjwCIP34frSjzOxAEzJ7k2CtAg1pmcShvkChBWqbThxPm6MBuzceoHtj79iHuHaEn0WAO+j4sXnXnbGswFOlDYWg1ngvrRYnCY3g=="                       
     },
     {
"ticket":"v1|ZiPs2l0zzXCsdfwe45dxCdHiukOdz/V/zQ/89xcnC5XnT+e47/q1FJjwCO4frSjzOxAEzJ7k2CtAg1pmcShvkChBWzc45dDGC32Dcxx4DGxczjDCGsdjowe9iHuaEn0WAO+GswFOlDYWg1ngvrRYnCY3g=="         	}    		
     } 
  ], 	
"success_num":100 
}
ログイン後にコピー
/**
 * 摇一摇红包 录入红包
 * @author jiosen
 */
class lottery_pub extends Wxpay_client_pub
{
	var $code;//code码,用以获取openid
	var $openid;//用户的openid

	function __construct($access_token)
	{
		//设置接口链接
		$this->url = "https://api.weixin.qq.com/shakearound/lottery/setprizebucket?access_token=".$access_token;
		//设置curl超时时间
		$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
	}

	/**
	 * 生成接口参数  json
	 */
	function createJson()
	{
		try
		{
			//检测必填参数
			if($this->parameters["lottery_id"] == null)
			{
				throw new SDKRuntimeException("缺少抽奖活动id lottery_id !"."<br>");
			}else if(empty($this->parameters["prize_info_list"])){
				throw new SDKRuntimeException("缺少抽奖活动红包 prize_info_list !"."<br>");
			}

			$this->parameters["mchid"] = WxPayConf_pub::MCHID;//授权商户号
			$this->parameters["sponsor_appid"] = WxPayConf_pub::APPID;//授权上号appid
			return  json_encode($this->parameters);
			//echo json_encode($this->parameters);die;
		}catch (SDKRuntimeException $e)
		{
			die($e->errorMessage());
		}
	}

	function setJsonArray($parameter, $parameterValue){
		$this->parameters[$this->trimString($parameter)] = $parameterValue;
	}
	function hbpreorder()
	{
		$data = $this->createJson();
		$result = $this->curl_post($this->url,$data);
		$result = json_decode($result);
		return $result;
	}

	function curl_post($url,$data)
    {
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_POST, 1);//发送一个常规的Post请求
    	curl_setopt($curl, CURLOPT_POSTFIELDS, $data);//Post提交的数据包
        $rv = curl_exec($curl);//输出内容
        curl_close($curl);
        return $rv;
    }

	/**
	 * 	作用:生成可以获得code的url
	 */
	function createOauthUrlForCode($redirectUrl)
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["redirect_uri"] = "$redirectUrl";
		$urlObj["response_type"] = "code";
		$urlObj["scope"] = "snsapi_base";
		$urlObj["state"] = "STATE"."#wechat_redirect";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
	}



	/**
	 * 	作用:生成可以获得openid的url
	 */
	function createOauthUrlForOpenid()
	{
		$urlObj["appid"] = WxPayConf_pub::APPID;
		$urlObj["secret"] = WxPayConf_pub::APPSECRET;
		$urlObj["code"] = $this->code;
		$urlObj["grant_type"] = "authorization_code";
		$bizString = $this->formatBizQueryParaMap($urlObj, false);
		return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
	}

	/**
	 * 	作用:通过curl向微信提交code,以获取openid
	 */
	function getOpenid()
	{
		$url = $this->createOauthUrlForOpenid();
		//初始化curl
		$ch = curl_init();
		//设置超时
		curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
		curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		//运行curl,结果以jason形式返回
		$res = curl_exec($ch);
		curl_close($ch);
		//取出openid
		$data = json_decode($res,true);
		$this->openid = $data['openid'];
		return $this->openid;
	}

	/**
	 * 	作用:设置code
	 */
	function setCode($code_)
	{
		$this->code = $code_;
	}

}
ログイン後にコピー

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

抢红包页面 php

 

 function getshakeinfo($access_token,$ticket){
        $getshakeinfourl='https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token='.$access_token;
          $jo=0;
          if($access_token){
            $data=array('ticket' =>$ticket);
            $rd=$this->curl_post($getshakeinfourl,json_encode($data));
            $jo=json_decode($rd);
          }else{
            echo 'access_token null';
          }
          return $jo;
    }

     $ticket=$_GET['ticket'];//获叏设备信息,包括 U UID 、 major 、 minor ,以及距离、 openID 等信息
     $token = getAccessToken();
        $shake=getshakeinfo($token,$ticket);
        $openid=$shake->data->openid;
        $jsapi = new Common_util_pub(); 
        $noncestr = $jsapi->createNoncestr();
        $parameters = array(
                'lottery_id' =>'创建活动时候返回的活动ID',
                'noncestr'=>$noncestr,
                'openid'=>$openid,
            );
        $signStr = $jsapi->formatBizQueryParaMap($parameters,false);
        $key = '创建活动时候的key';
        $signStr=$signStr."&key=".$key;
        $sign = strtoupper(md5($signStr));
        
ログイン後にコピー

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

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

红包绑定用户事件通知     

接口说明

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

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

推送XML数据包示例

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

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

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

<?php
/*** WeChat 支払いヘルプ ライブラリ
 * ================================================ ===
 ※インターフェースには3種類あります。
 * [リクエストインターフェイス]--Wxpay_client_
 * 統合支払インターフェイス クラス -- UnifiedOrder
 * 注文クエリ インターフェイス -- OrderQuery
 * 返金申請インターフェース -- 返金
 * 返金クエリ インターフェース - RefundQuery
 * 請求書インターフェース - DownloadBill
 * ショートリンク変換インターフェース -- ShortUrl
 * [応答性の高いインターフェイス]--Wxpay_server_
 * 一般的な通知インターフェイス -- 通知
 * ネイティブ支払い - 加盟店に製品情報インターフェイスの取得を要求 - NativeCall
 * 【他の】
 * 静的リンク QR コード - NativeLink
 * JSAPI 支払い -- JsApi
 * ================================================ ====
 ※【CommonUtil】よく使うツール:
 ※trimString()、パラメータ設定時に必要な文字処理関数
 * createNoncestr()、32 ビット以下のランダムな文字列を生成します
 * formatBizQueryParaMap()、フォーマットパラメータ、署名プロセスに必要
 * getSign()、署名を生成
 * arrayToXml()、配列を XML に変換
 * xmlToArray()、xml から配列へ
 * postXmlCurl()、投稿モードで対応するインターフェイス URL に XML を送信します
 * postXmlSSLCurl()、証明書を使用して、ポスト モードで対応するインターフェイス URL に XML を送信します。*/
	include_once("SDKRuntimeException.php");
	include_once("WxPay.pub.config.php");

/*** すべてのインターフェースの基本クラス*/
クラス Common_util_pub
{
	関数 __construct() {
	}

	関数トリム文字列($value)
	{
		$ret = null;
		if (null != $value) 
		{
			$ret = $value;
			if (strlen($ret) == 0) 
			{
				$ret = null;
			}
		}
		$ret を返します。
	}
	
	/*** 機能: 32 ビット以下のランダムな文字列を生成します。*/
	パブリック関数 createNoncestr( $length = 32 ) 
	{
		$chars = "abcdefghijklmnopqrstuvwxyz0123456789";  
		$str ="";
		for ( $i = 0; $i < $length; $i++ ) {  
			$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);  
		}  
		$str を返します。
	}
	
	/*** 機能: 署名プロセスに必要なフォーマットパラメータ*/
	関数 formatBizQueryParaMap($paraMap, $urlencode)
	{
		$buff = "";
		ksort($paraMap);
		foreach ($paraMap as $k => $v)
		{
		    if($urlencode)
		    {
			   $v = urlencode($v);
			}
			//$buff .= strto lower($k) . 「=」。 $v 。 "&";
			$buff .= $k . 「=」。 $v 。 "&";
		}
		$reqPar;
		if (strlen($buff) > 0) 
		{
			$reqPar = substr($buff, 0, strlen($buff)-1);
		}
		$reqPar を返します。
	}
	
	/*** 機能: 署名を生成*/
	パブリック関数 getSign($Obj)
	{
		foreach ($Obj as $k => $v)
		{
			$パラメータ[$k] = $v;
		}
		//签名步骤一:按字典序排序パラメータ
		ksort($Parameters);
		$String = $this->formatBizQueryParaMap($Parameters, false);
		//echo '【string1】'.$String.'</br>';
		//签名步骤二:文字列の後にKEYを追加
		$String = $String."&key=".WxPayConf_pub::KEY;
		//echo "【string2】".$String."</br>";
		//签名步骤三:MD5加密
		$String = md5($String);
		//echo "【string3】 ".$String."</br>";
		//签名步骤四:全字符转は大写
		$result_ = strtoupper($String);
		//echo "【結果】 ".$result_."</br>";
		$result_ を返します。
	}
	
	/*** 関数: 配列を XML に変換*/
	関数 arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key=>$val)
        {
        	 if (is_numeric($val))
        	 {
        	 	$xml.="<".$key.">".$val."</".$key.">"; 

        	 }
        	 それ以外
        	 	$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
        }
        $xml.="</xml>";
        $xml を返します。 
    }
	
	/*** 関数: XML を配列に変換します。*/
	パブリック関数 xmlToArray($xml)
	{		
        // XML を配列にします        
        $array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);		
		$array_data を返します。
	}

	/*** 機能: 投稿モードで対応するインターフェイス URL に XML を送信します。*/
	パブリック関数 postXmlCurl($xml,$url,$秒=30)
	{		
        //初期化カール        
       	$ch =curl_init();
		//設置超時間
		カール_setopt($ch, CURLOP_TIMEOUT, $秒);
        // ここに設置代理人がいる場合、その旨
        //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);
		//設置ヘッダー
		curl_setopt($ch, CURLOPT_HEADER, FALSE);
		// 要求結果は文字列であり、画面上に出力されます
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		//ポスト手渡し方式
		curl_setopt($ch, CURLOPT_POST, TRUE);
		curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
		//カールを実行する
        $data =curl_exec($ch);
		カール_クローズ($ch);
		//返結果
		if($data)
		{
			カール_クローズ($ch);
			$data を返します。
		}それ以外
{
$error =curl_errno($ch);
echo "カール エラー、エラー コード: $error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>エラー原因クエリ</a></br>";
カール_クローズ($ch);
false を返します。
}
}

/*** 機能: 証明書を使用して、ポスト モードで対応するインターフェイス URL に XML を送信します。*/
関数 postXmlSSLCurl($xml,$url,$秒=30)
{
$ch =curl_init();
//タイムアウト
curl_setopt($ch,CURLOPT_TIMEOUT,$秒);
// プロキシがある場合は、ここにプロキシを設定します
        //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);
//ヘッダーを設定する
curl_setopt($ch,CURLOPT_HEADER,FALSE);
// 結果は文字列である必要があり、それを画面に出力します
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//証明書を設定する
//証明書を使用します: 証明書とキーはそれぞれ 2 つの .pem ファイルに属します
// デフォルトの形式は PEM であり、コメント化できます
//curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
//curl_setopt($ch,CURLOPT_SSLCERT,WxPayConf_pub::SSLCERT_PATH );
// //デフォルトの形式は PEM であり、コメント化できます
//curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
//curl_setopt($ch,CURLOPT_SSLKEY, WxPayConf_pub::SSLKEY_PATH);
		
curl_setopt($ch, CURLOPT_SSLCERT,WxPayConf_pub::SSLCERT_PATH);
curl_setopt($ch, CURLOPT_SSLKEY,WxPayConf_pub::SSLKEY_PATH);
curl_setopt($ch, CURLOPT_CAINFO, WxPayConf_pub::SSLCA_PATH); // CA ルート証明書 (Web サイト証明書が CA によって発行されたかどうかを確認するために使用されます)
		
		
//ポスト送信メソッド
curl_setopt($ch,CURLOPT_POST, true);
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
$data =curl_exec($ch);
//結果を返す
if($data){
カール_クローズ($ch);
$data を返します。
}
それ以外 {
$error =curl_errno($ch);
echo "カール エラー、エラー コード: $error"."<br>";
echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>エラー原因クエリ</a></br>";
カール_クローズ($ch);
false を返します。
}
}
	
/*** 関数: 配列を出力*/
関数 printErr($wording='',$err='')
{
print_r('<pre class="brush:php;toolbar:false">');
echo $wording."</br>";
var_dump($err);
print_r('
'); } } /*** リクエストインターフェイスの基本クラス*/ クラス Wxpay_client_pub は Common_util_pub を拡張します { var $parameters;//リクエストパラメータ、タイプは連想配列です public $response; //WeChat から返された応答 public $result;//戻りパラメータ、型は連想配列 var $url;//インターフェースリンク var $curl_timeout;//カールタイムアウト /*** 機能: リクエストパラメータの設定*/ 関数 setParameter($parameter, $parameterValue) { $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue); } /*** 機能: 標準リクエストパラメータの設定、署名の生成、インターフェースパラメータ XML の生成*/ 関数createXml() { $this->parameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//販売者 ID $this->parameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->parameters["sign"] = $this->getSign($this->parameters);//署名 return $this->arrayToXml($this->parameters); } /*** 機能: ポストリクエスト XML*/ 関数postXml() { $xml = $this->createXml(); $this->response = $this->postXmlCurl($xml,$this->url,$this->curl_timeout); $this->レスポンスを返す; } /*** 機能: 証明書ポストを使用して XML をリクエストします*/ 関数 postXmlSSL() { $xml = $this->createXml(); $this->response = $this->postXmlSSLCurl($xml,$this->url,$this->curl_timeout); $this->レスポンスを返す; } /*** 機能: 結果を取得します。デフォルトでは証明書は使用されません*/ 関数 getResult() { $this->postXml(); $this->result = $this->xmlToArray($this->response); $this->結果を返す; } } /*** 統合された支払いインターフェイス クラス*/ クラス UnifiedOrder_pub は Wxpay_client_pub を拡張します { function__construct() { //インターフェースリンクを設定する $this->url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //カールのタイムアウトを設定する $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { //必要なパラメータを検出する if($this->parameters["out_trade_no"] == null) { throw new SDKRuntimeException("統合決済インターフェイスの必須パラメータ out_trade_no が見つかりません!"."
"); }elseif($this->parameters["body"] == null){ throw new SDKRuntimeException("統合決済インターフェイスの必須パラメータ本体が見つかりません!"."
"); }elseif ($this->parameters["total_fee"] == null ) { throw new SDKRuntimeException("統合支払いインターフェイスの必須パラメータ total_fee がありません!"."
"); }elseif ($this->parameters["notify_url"] == null) { throw new SDKRuntimeException("統合決済インターフェイスの必須パラメータnotify_urlが見つかりません!"."
"); }elseif ($this->parameters["trade_type"] == null) { throw new SDKRuntimeException("統合決済インターフェイスの必須パラメータ trade_type がありません!"."
"); }elseif ($this->parameters["trade_type"] == "JSAPI" && $this->parameters["openid"] == NULL){ throw new SDKRuntimeException("統合決済インターフェイスに必須パラメータ openid がありません! trade_type が JSAPI の場合、openid は必須パラメータです!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//販売者 ID $this->parameters["spbill_create_ip"] = $_SERVER['REMOTE_ADDR'];//ターミナルIP $this->parameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->parameters["sign"] = $this->getSign($this->parameters);//署名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** prepay_id を取得する*/ 関数 getPrepayId() { $this->postXml(); $this->result = $this->xmlToArray($this->response); $prepay_id = $this->result["prepay_id"]; $prepay_id を返します; } } /*** 注文クエリインターフェイス*/ クラス OrderQuery_pub は Wxpay_client_pub を拡張します { function__construct() { //インターフェースリンクを設定する $this->url = "https://api.mch.weixin.qq.com/pay/orderquery"; //カールのタイムアウトを設定する $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { //必要なパラメータを検出する if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) { throw new SDKRuntimeException("注文クエリ インターフェイスで、少なくとも 1 つの out_trade_no とtransaction_id を入力してください!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//販売者 ID $this->parameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->parameters["sign"] = $this->getSign($this->parameters);//署名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } } /*** 返金申請インターフェース*/ クラスRefund_pubはWxpay_client_pubを拡張します { 関数 __construct() { //インターフェースリンクを設定する $this->url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; //カールのタイムアウトを設定する $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { //必要なパラメータを検出する if($this->parameters["out_trade_no"] == null && $this->parameters["transaction_id"] == null) { throw new SDKRuntimeException("返金アプリケーション インターフェイスで、少なくとも 1 つの out_trade_no とtransaction_id を入力してください!"."
"); }elseif($this->parameters["out_refund_no"] == null){ throw new SDKRuntimeException("返金アプリケーション インターフェイスに、必須パラメータ out_refund_no がありません!"."
"); }elseif($this->parameters["total_fee"] == null){ throw new SDKRuntimeException("返金アプリケーション インターフェイスに、必須パラメータ total_fee がありません!"."
"); }elseif($this->parameters["refund_fee"] == null){ throw new SDKRuntimeException("返金アプリケーション インターフェイスに、必要なパラメータrefund_feeがありません!"."
"); }elseif($this->parameters["op_user_id"] == null){ throw new SDKRuntimeException("返金アプリケーション インターフェイスに、必須パラメータ op_user_id がありません。"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号 $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 $this->parameters["sign"] = $this->getSign($this->parameters);//签名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** 機能: 結果の取得と証明書を使用した通信*/ 関数 getResult() { $this->postXmlSSL(); $this->result = $this->xmlToArray($this->response); $this->結果を返す; } } /*** 返金クエリインターフェース*/ クラスRefundQuery_pubはWxpay_client_pubを拡張します { 関数 __construct() { // インターフェイス接続を設定します $this->url = "https://api.mch.weixin.qq.com/pay/refundquery"; //カールを設定します超時間 $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { 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四个パラメータ必須充填一个!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号 $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 $this->parameters["sign"] = $this->getSign($this->parameters);//签名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** 機能: 結果の取得と証明書を使用した通信*/ 関数 getResult() { $this->postXmlSSL(); $this->result = $this->xmlToArray($this->response); $this->結果を返す; } } /*** 請求インターフェース*/ クラス DownloadBill_pub は Wxpay_client_pub を拡張します { 関数 __construct() { // インターフェイス接続を設定します $this->url = "https://api.mch.weixin.qq.com/pay/downloadbill"; //カールを設定します超時間 $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { if($this->parameters["bill_date"] == null ) { throw new SDKRuntimeException("对账单接口中,缺少必充填パラメータbill_date!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//公众账号ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号 $this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串 $this->parameters["sign"] = $this->getSign($this->parameters);//签名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** 機能: 結果を取得します。デフォルトでは証明書は使用されません*/ 関数 getResult() { $this->postXml(); $this->result = $this->xmlToArray($this->result_xml); $this->結果を返す; } } /*** ショートリンク変換インターフェース*/ クラス ShortUrl_pub は Wxpay_client_pub を拡張します { 関数 __construct() { // インターフェイス接続を設定します $this->url = "https://api.mch.weixin.qq.com/tools/shorturl"; //カールを設定します超時間 $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { if($this->parameters["long_url"] == null ) { throw new SDKRuntimeException("短链接转换接口中,缺少必須充填パラメータlong_url!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//販売者 ID $this->parameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->parameters["sign"] = $this->getSign($this->parameters);//署名 return $this->arrayToXml($this->parameters); }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** prepay_id を取得する*/ 関数 getShortUrl() { $this->postXml(); $prepay_id = $this->result["short_url"]; $prepay_id を返します; } } /***レスポンシブインターフェイスの基本クラス*/ クラス Wxpay_server_pub は Common_util_pub を拡張します { public $data;//受信データ、型は連想配列 var $returnParameters; // パラメータを返します。型は連想配列です。 /*** データ処理を容易にするために、WeChat のリクエスト XML を連想配列に変換します。*/ 関数 saveData($xml) { $this->data = $this->xmlToArray($xml); } 関数 checkSign() { $tmpData = $this->data; unset($tmpData['sign']); $sign = $this->getSign($tmpData);//ローカル署名 if ($this->data['sign'] == $sign) { TRUEを返します。 } FALSEを返します。 } /*** WeChatリクエストデータの取得*/ 関数 getData() { $this->データを返す; } /*** WeChatに返されるXMLデータを設定します*/ 関数 setReturnParameter($parameter, $parameterValue) { $this->returnParameters[$this->trimString($parameter)] = $this->trimString($parameterValue); } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { return $this->arrayToXml($this->returnParameters); } /*** XMLデータをWeChatに返す*/ 関数 returnXml() { $returnXml = $this->createXml(); $returnXml を返します。 } } /*** ユニバーサル通知インターフェース*/ クラス Notify_pub は Wxpay_server_pub を拡張します { } /*** 加盟店に製品情報インターフェースの取得を要求します*/ クラス NativeCall_pub は Wxpay_server_pub を拡張します { /*** インターフェースパラメータ XML を生成*/ 関数createXml() { if($this->returnParameters["return_code"] == "SUCCESS"){ $this->returnParameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->returnParameters["mch_id"] = WxPayConf_pub::MCHID;//販売者番号 $this->returnParameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->returnParameters["sign"] = $this->getSign($this->returnParameters);//署名 } return $this->arrayToXml($this->returnParameters); } /*** product_id を取得します*/ 関数 getProductId() { $product_id = $this->data["product_id"]; $product_id を返します; } } /*** 静的リンク QR コード*/ クラス NativeLink_pub は Common_util_pub を拡張します { var $parameters; //静的リンクパラメータ var $url;//静的リンク function__construct() { } /***パラメータを設定します*/ 関数 setParameter($parameter, $parameterValue) { $this->parameters[$this->trimString($parameter)] = $this->trimString($parameterValue); } /*** ネイティブ支払いリンク QR コードを生成*/ 関数createLink() { 試す { if($this->parameters["product_id"] == null) { throw new SDKRuntimeException("ネイティブ支払い QR コード リンクの必須パラメータ product_id がありません!"."
"); } $this->parameters["appid"] = WxPayConf_pub::APPID;//パブリック アカウント ID $this->parameters["mch_id"] = WxPayConf_pub::MCHID;//販売者 ID $time_stamp = 時間(); $this->parameters["time_stamp"] = "$time_stamp";//タイムスタンプ $this->parameters["nonce_str"] = $this->createNoncestr();//ランダムな文字列 $this->parameters["sign"] = $this->getSign($this->parameters);//署名 $bizString = $this->formatBizQueryParaMap($this->パラメータ, false); $this->url = "weixin://wxpay/bizpayurl?".$bizString; }catch (SDKRuntimeException $e) { die($e->errorMessage()); } } /*** リターンリンク*/ 関数getUrl() { $this->createLink(); $this->urlを返します; } } /*** JSAPI 支払い - H5 Web ページが支払いインターフェイスを呼び出します*/ クラス JsApi_pub は Common_util_pub を拡張します { var $code;//openid を取得するコードを記述します var $openid;//ユーザーのopenid var $parameters;//jsapi パラメータ、形式は json var $prepay_id;// 統合された支払いインターフェースを使用して取得された前払い ID var $curl_timeout;//カールタイムアウト function__construct() { //カールのタイムアウトを設定する $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** 機能: コードを取得できる URL を生成します。*/ 関数 createOauthUrlForCode($redirectUrl) { $urlObj["appid"] = WxPayConf_pub::APPID; $urlObj["redirect_uri"] = "$redirectUrl"; $urlObj["応答タイプ"] = "コード"; $urlObj["スコープ"] = "snsapi_base"; $urlObj["状態"] = "状態"."#wechat_redirect"; $bizString = $this->formatBizQueryParaMap($urlObj, false); return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; } /*** 機能: openidを取得できるURLを生成*/ 関数 createOauthUrlForOpenid() { $urlObj["appid"] = WxPayConf_pub::APPID; $urlObj["シークレット"] = WxPayConf_pub::APPSECRET; $urlObj["コード"] = $this->コード; $urlObj["認可タイプ"] = "認可コード"; $bizString = $this->formatBizQueryParaMap($urlObj, false); return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; } /*** 機能:curl を介してコードを WeChat に送信し、openid を取得します。*/ 関数 getOpenid() { $url = $this->createOauthUrlForOpenid(); //カールを初期化する $ch =curl_init(); //タイムアウトを設定する curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); curl_setopt($ch, CURLOPT_HEADER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); //curl を実行すると、結果が jason の形式で返されます。 $res =curl_exec($ch); カール_クローズ($ch); //openidを取得する $data = json_decode($res,true); $this->openid = $data['openid']; $this->openid を返す; } /*** 機能: prepay_id を設定します*/ 関数 setPrepayId($prepayId) { $this->prepay_id = $prepayId; } /*** 機能: コードを設定します。*/ 関数 setCode($code_) { $this->コード = $code_; } /*** 機能: jsapi のパラメータを設定します*/ パブリック関数 getParameters() { $jsApiObj["appId"] = WxPayConf_pub::APPID; $timeStamp = 時間(); $jsApiObj["タイムスタンプ"] = "$タイムスタンプ"; $jsApiObj["nonceStr"] = $this->createNoncestr(); $jsApiObj["パッケージ"] = "prepay_id=$this->prepay_id"; $jsApiObj["signType"] = "MD5"; $jsApiObj["paySign"] = $this->getSign($jsApiObj); $this->parameters = json_encode($jsApiObj); $this->パラメータを返す; } } /***現金赤い封筒インターフェイス * @作者gaoyl101*/ クラス Redpack_pub は Wxpay_client_pub を拡張します { var $code;//openid を取得するコードを記述します var $openid;//ユーザーのopenid function__construct() { //インターフェースリンクを設定する $this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"; //カールのタイムアウトを設定する $this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT; } /*** インターフェースパラメータ XML を生成*/ 関数createXml() { 試す { //必要なパラメータを検出する if($this->parameters["mch_billno"] == null) { throw new SDKRuntimeException("赤い封筒送信インターフェイスに必要なパラメータ mch_billno がありません!"."
"); }elseif($this->parameters["nick_name"] == null){ throw new SDKRuntimeException("赤い封筒の送信インターフェイスに必要なパラメーター nick_name がありません!"."
"); }elseif ($this->parameters["send_name"] == null ) { throw new SDKRuntimeException("赤い封筒の送信インターフェイスに必要なパラメーター send_name がありません!"."
"); }elseif ($this->parameters["total_amount"] == null) { throw new SDKRuntimeException("赤い封筒送信インターフェイスに必要なパラメーター total_amount が見つかりません!"."
"); }elseif($this->parameters["min_value"] == null){ throw new SDKRuntimeException("赤い封筒送信インターフェイスに必要なパラメータ min_value がありません!"."
"); }elseif ($this->parameters["max_value"] == null ) { throw new SDKRuntimeException("赤い封筒の送信インターフェイスに必要な max_value パラメーターがありません!"."
"); }elseif ($this->parameters["total_num"] == null) { throw new SDKRuntimeException("赤い封筒送信インターフェイスに必要なパラメーター total_num が見つかりません!"."
"); }elseif ($this->parameters["wishing"] == null) { throw new SDKRuntimeException("赤い封筒送信インターフェイスに必要な必須パラメータがありません!"."
"); }elseif ($this->parameters["act_name"] == null) { throw new SDKRuntimeException("赤い封筒送信インターフェイスの必須パラメータ act_name がありません!"."
"); }elseif ($this->parameters["remark"] == null) { throw new SDKRuntimeException("不足しています
ログイン後にコピー
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート