php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中。
内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI
<?php classWxApi{ constappId=""; constappSecret=""; constmchid="";//商户号 constprivatekey="";//私钥 public$parameters=array(); public$jsApiTicket=NULL; public$jsApiTime=NULL; publicfunction__construct(){ } /**************************************************** *微信提交API方法,返回微信指定JSON ****************************************************/ publicfunctionwxHttpsRequest($url,$data=null){ $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE); curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE); if(!empty($data)){ curl_setopt($curl,CURLOPT_POST,1); curl_setopt($curl,CURLOPT_POSTFIELDS,$data); } curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $output=curl_exec($curl); curl_close($curl); return$output; } /**************************************************** *微信带证书提交数据-微信红包使用 ****************************************************/ publicfunctionwxHttpsRequestPem($url,$vars,$second=30,$aHeader=array()){ $ch=curl_init(); //超时时间 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //这里设置代理,如果有的话 //curl_setopt($ch,CURLOPT_PROXY,'10.206.30.98'); //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); //以下两种方式需选择一种 //第一种方法,cert与key分别属于两个.pem文件 //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem'); //默认格式为PEM,可以注释 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem'); curl_setopt($ch,CURLOPT_CAINFO,'PEM'); curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem'); //第二种方式,两个文件合成一个.pem文件 //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); if(count($aHeader)>=1){ curl_setopt($ch,CURLOPT_HTTPHEADER,$aHeader); } curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); $data=curl_exec($ch); if($data){ curl_close($ch); return$data; } else{ $error=curl_errno($ch); echo"callfaild,errorCode:$error\n"; curl_close($ch); returnfalse; } } /**************************************************** *微信获取AccessToken返回指定微信公众号的at信息 ****************************************************/ publicfunctionwxAccessToken($appId=NULL,$appSecret=NULL){ $appId=is_null($appId)?self::appId:$appId; $appSecret=is_null($appSecret)?self::appSecret:$appSecret; $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret; $result=$this->wxHttpsRequest($url); //print_r($result); $jsoninfo=json_decode($result,true); $access_token=$jsoninfo["access_token"]; return$access_token; } /**************************************************** *微信获取ApiTicket返回指定微信公众号的at信息 ****************************************************/ publicfunctionwxJsApiTicket($appId=NULL,$appSecret=NULL){ $appId=is_null($appId)?self::appId:$appId; $appSecret=is_null($appSecret)?self::appSecret:$appSecret; $url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$this->wxAccessToken(); $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); $ticket=$jsoninfo['ticket']; //echo$ticket."<br/>"; return$ticket; } publicfunctionwxVerifyJsApiTicket($appId=NULL,$appSecret=NULL){ if(!empty($this->jsApiTime)&&intval($this->jsApiTime)>time()&&!empty($this->jsApiTicket)){ $ticket=$this->jsApiTicket; } else{ $ticket=$this->wxJsApiTicket($appId,$appSecret); $this->jsApiTicket=$ticket; $this->jsApiTime=time()+7200; } return$ticket; } /**************************************************** *微信通过OPENID获取用户信息,返回数组 ****************************************************/ publicfunctionwxGetUser($openId){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN"; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信生成二维码ticket ****************************************************/ publicfunctionwxQrCodeTicket($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); return$result; } /**************************************************** *微信通过ticket生成二维码 ****************************************************/ publicfunctionwxQrCode($ticket){ $url="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket); return$url; } /**************************************************** *微信通过指定模板信息发送给指定用户,发送完成后返回指定JSON数据 ****************************************************/ publicfunctionwxSendTemplate($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); return$result; } /**************************************************** *发送自定义的模板消息 ****************************************************/ publicfunctionwxSetSend($touser,$template_id,$url,$data,$topcolor='#7B68EE'){ $template=array( 'touser'=>$touser, 'template_id'=>$template_id, 'url'=>$url, 'topcolor'=>$topcolor, 'data'=>$data ); $jsonData=urldecode(json_encode($template)); echo$jsonData; $result=$this->wxSendTemplate($jsonData); return$result; } /**************************************************** *微信设置OAUTH跳转URL,返回字符串信息-SCOPE=snsapi_base//验证时不返回确认页面,只能获取OPENID ****************************************************/ publicfunctionwxOauthBase($redirectUrl,$state="",$appId=NULL){ $appId=is_null($appId)?self::appId:$appId; $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect"; return$url; } /**************************************************** *微信设置OAUTH跳转URL,返回字符串信息-SCOPE=snsapi_userinfo//获取用户完整信息 ****************************************************/ publicfunctionwxOauthUserinfo($redirectUrl,$state="",$appId=NULL){ $appId=is_null($appId)?self::appId:$appId; $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect"; return$url; } /**************************************************** *微信OAUTH跳转指定URL ****************************************************/ publicfunctionwxHeader($url){ header("location:".$url); } /**************************************************** *微信通过OAUTH返回页面中获取AT信息 ****************************************************/ publicfunctionwxOauthAccessToken($code,$appId=NULL,$appSecret=NULL){ $appId=is_null($appId)?self::appId:$appId; $appSecret=is_null($appSecret)?self::appSecret:$appSecret; $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code"; $result=$this->wxHttpsRequest($url); //print_r($result); $jsoninfo=json_decode($result,true); //$access_token=$jsoninfo["access_token"]; return$jsoninfo; } /**************************************************** *微信通过OAUTH的Access_Token的信息获取当前用户信息//只执行在snsapi_userinfo模式运行 ****************************************************/ publicfunctionwxOauthUser($OauthAT,$openId){ $url="https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN"; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *创建自定义菜单 ****************************************************/ publicfunctionwxMenuCreate($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *获取自定义菜单 ****************************************************/ publicfunctionwxMenuGet(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/menu/get?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *删除自定义菜单 ****************************************************/ publicfunctionwxMenuDelete(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *获取第三方自定义菜单 ****************************************************/ publicfunctionwxMenuGetInfo(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-Add添加客服人员 ****************************************************/ publicfunctionwxServiceAdd($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfaccount/add?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-Update编辑客服人员 ****************************************************/ publicfunctionwxServiceUpdate($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfaccount/update?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-Delete删除客服人员 ****************************************************/ publicfunctionwxServiceDelete($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfaccount/del?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信客服接口-上传头像 *******************************************************/ publicfunctionwxServiceUpdateCover($kf_account,$media=''){ $wxAccessToken=$this->wxAccessToken(); //$data['access_token']=$wxAccessToken; $data['media']='@D:\\workspace\\htdocs\\yky_test\\logo.jpg'; $url="https://api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=".$wxAccessToken."&kf_account=".$kf_account; $result=$this->wxHttpsRequest($url,$data); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-获取客服列表 ****************************************************/ publicfunctionwxServiceList(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/customservice/getkflist?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-获取在线客服接待信息 ****************************************************/ publicfunctionwxServiceOnlineList(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服接口-客服发送信息 ****************************************************/ publicfunctionwxServiceSend($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服会话接口-创建会话 ****************************************************/ publicfunctionwxServiceSessionAdd($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfsession/create?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服会话接口-关闭会话 ****************************************************/ publicfunctionwxServiceSessionClose(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfsession/close?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服会话接口-获取会话 ****************************************************/ publicfunctionwxServiceSessionGet($openId){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfsession/getsession?access_token=".$wxAccessToken."&openid=".$openId; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服会话接口-获取会话列表 ****************************************************/ publicfunctionwxServiceSessionList($kf_account){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfsession/getsessionlist?access_token=".$wxAccessToken."&kf_account=".$kf_account; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信客服会话接口-未接入会话 ****************************************************/ publicfunctionwxServiceSessionWaitCase(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/customservice/kfsession/getwaitcase?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-申请设备ID ****************************************************/ publicfunctionwxDeviceApply($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/device/applyid?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-编辑设备ID ****************************************************/ publicfunctionwxDeviceUpdate($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/device/update?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-本店关联设备 ****************************************************/ publicfunctionwxDeviceBindLocation($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/device/bindlocation?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-查询设备列表 ****************************************************/ publicfunctionwxDeviceSearch($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/device/search?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-新增页面 ****************************************************/ publicfunctionwxPageAdd($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/page/add?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-编辑页面 ****************************************************/ publicfunctionwxPageUpdate($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/page/update?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-查询页面 ****************************************************/ publicfunctionwxPageSearch($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/page/search?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-删除页面 ****************************************************/ publicfunctionwxPageDelete($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/page/delete?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信摇一摇-上传图片素材 *******************************************************/ publicfunctionwxMaterialAdd($media=''){ $wxAccessToken=$this->wxAccessToken(); //$data['access_token']=$wxAccessToken; $data['media']='@D:\\workspace\\htdocs\\yky_test\\logo.jpg'; $url="https://api.weixin.qq.com/shakearound/material/add?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$data); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-配置设备与页面的关联关系 ****************************************************/ publicfunctionwxDeviceBindPage($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/device/bindpage?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-获取摇周边的设备及用户信息 ****************************************************/ publicfunctionwxGetShakeInfo($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /**************************************************** *微信摇一摇-以设备为维度的数据统计接口 ****************************************************/ publicfunctionwxGetShakeStatistics($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/shakearound/statistics/device?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /***************************************************** *生成随机字符串-最长为32位字符串 *****************************************************/ publicfunctionwxNonceStr($length=16,$type=FALSE){ $chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str=""; for($i=0;$i<$length;$i++){ $str.=substr($chars,mt_rand(0,strlen($chars)-1),1); } if($type==TRUE){ returnstrtoupper(md5(time().$str)); } else{ return$str; } } /******************************************************* *微信商户订单号-最长28位字符串 *******************************************************/ publicfunctionwxMchBillno($mchid=NULL){ if(is_null($mchid)){ if(self::mchid==""||is_null(self::mchid)){ $mchid=time(); } else{ $mchid=self::mchid; } } else{ $mchid=substr(addslashes($mchid),0,10); } returndate("Ymd",time()).time().$mchid; } /******************************************************* *微信格式化数组变成参数格式-支持url加密 *******************************************************/ publicfunctionwxSetParam($parameters){ if(is_array($parameters)&&!empty($parameters)){ $this->parameters=$parameters; return$this->parameters; } else{ returnarray(); } } /******************************************************* *微信格式化数组变成参数格式-支持url加密 *******************************************************/ publicfunctionwxFormatArray($parameters=NULL,$urlencode=FALSE){ if(is_null($parameters)){ $parameters=$this->parameters; } $restr="";//初始化空 ksort($parameters);//排序参数 foreach($parametersas$k=>$v){//循环定制参数 if(null!=$v&&"null"!=$v&&"sign"!=$k){ if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要 $v=urlencode($v); } $restr.=$k."=".$v."&";//返回完整字符串 } } if(strlen($restr)>0){//如果存在数据则将最后“&”删除 $restr=substr($restr,0,strlen($restr)-1); } return$restr;//返回字符串 } /******************************************************* *微信MD5签名生成器-需要将参数数组转化成为字符串[wxFormatArray方法] *******************************************************/ publicfunctionwxMd5Sign($content,$privatekey){ try{ if(is_null($privatekey)){ thrownewException("财付通签名key不能为空!"); } if(is_null($content)){ thrownewException("财付通签名内容不能为空"); } $signStr=$content."&key=".$privatekey; returnstrtoupper(md5($signStr)); } catch(Exception$e) { die($e->getMessage()); } } /******************************************************* *微信Sha1签名生成器-需要将参数数组转化成为字符串[wxFormatArray方法] *******************************************************/ publicfunctionwxSha1Sign($content){ try{ if(is_null($content)){ thrownewException("签名内容不能为空"); } //$signStr=$content; returnsha1($content); } catch(Exception$e) { die($e->getMessage()); } } /******************************************************* *微信jsApi整合方法-通过调用此方法获得jsapi数据 *******************************************************/ publicfunctionwxJsapiPackage(){ $jsapi_ticket=$this->wxVerifyJsApiTicket(); //注意URL一定要动态获取,不能hardcode. $protocol=(!empty($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=='off'||$_SERVER['SERVER_PORT']==443)?"https://":"http://"; $url=$protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; $timestamp=time(); $nonceStr=$this->wxNonceStr(); $signPackage=array( "jsapi_ticket"=>$jsapi_ticket, "nonceStr"=>$nonceStr, "timestamp"=>$timestamp, "url"=>$url ); //这里参数的顺序要按照key值ASCII码升序排序 $rawString="jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; //$rawString=$this->wxFormatArray($signPackage); $signature=$this->wxSha1Sign($rawString); $signPackage['signature']=$signature; $signPackage['rawString']=$rawString; $signPackage['appId']=self::appId; return$signPackage; } /******************************************************* *微信卡券:JSAPI卡券Package-基础参数没有附带任何值-再生产环境中需要根据实际情况进行修改 *******************************************************/ publicfunctionwxCardPackage($cardId,$timestamp=''){ $api_ticket=$this->wxVerifyJsApiTicket(); if(!empty($timestamp)){ $timestamp=$timestamp; } else{ $timestamp=time(); } $arrays=array(self::appSecret,$timestamp,$cardId); sort($arrays,SORT_STRING); //print_r($arrays); //echoimplode("",$arrays)."<br/>"; $string=sha1(implode($arrays)); //echo$string; $resultArray['cardId']=$cardId; $resultArray['cardExt']=array(); $resultArray['cardExt']['code']=''; $resultArray['cardExt']['openid']=''; $resultArray['cardExt']['timestamp']=$timestamp; $resultArray['cardExt']['signature']=$string; //print_r($resultArray); return$resultArray; } /******************************************************* *微信卡券:JSAPI卡券全部卡券Package *******************************************************/ publicfunctionwxCardAllPackage($cardIdArray=array(),$timestamp=''){ $reArrays=array(); if(!empty($cardIdArray)&&(is_array($cardIdArray)||is_object($cardIdArray))){ //print_r($cardIdArray); foreach($cardIdArrayas$value){ //print_r($this->wxCardPackage($value,$openid)); $reArrays[]=$this->wxCardPackage($value,$timestamp); } //print_r($reArrays); } else{ $reArrays[]=$this->wxCardPackage($cardIdArray,$timestamp); } returnstrval(json_encode($reArrays)); } /******************************************************* *微信卡券:获取卡券列表 *******************************************************/ publicfunctionwxCardListPackage($cardType="",$cardId=""){ //$api_ticket=$this->wxVerifyJsApiTicket(); $resultArray=array(); $timestamp=time(); $nonceStr=$this->wxNonceStr(); //$strings= $arrays=array(self::appId,self::appSecret,$timestamp,$nonceStr); sort($arrays,SORT_STRING); $string=sha1(implode($arrays)); $resultArray['app_id']=self::appId; $resultArray['card_sign']=$string; $resultArray['time_stamp']=$timestamp; $resultArray['nonce_str']=$nonceStr; $resultArray['card_type']=$cardType; $resultArray['card_id']=$cardId; return$resultArray; } /******************************************************* *将数组解析XML-微信红包接口 *******************************************************/ publicfunctionwxArrayToXml($parameters=NULL){ if(is_null($parameters)){ $parameters=$this->parameters; } if(!is_array($parameters)||empty($parameters)){ die("参数不为数组无法解析"); } $xml="<xml>"; foreach($arras$key=>$val) { if(is_numeric($val)) { $xml.="<".$key.">".$val."</".$key.">"; } else $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } $xml.="</xml>"; return$xml; } /******************************************************* *微信卡券:上传LOGO-需要改写动态功能 *******************************************************/ publicfunctionwxCardUpdateImg(){ $wxAccessToken=$this->wxAccessToken(); //$data['access_token']=$wxAccessToken; $data['buffer']='@D:\\workspace\\htdocs\\yky_test\\logo.jpg'; $url="https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$data); $jsoninfo=json_decode($result,true); return$jsoninfo; //array(1){["url"]=>string(121)"http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0"} } /******************************************************* *微信卡券:获取颜色 *******************************************************/ publicfunctionwxCardColor(){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/getcolors?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:拉取门店列表 *******************************************************/ publicfunctionwxBatchGet($offset=0,$count=0){ $jsonData=json_encode(array('offset'=>intval($offset),'count'=>intval($count))); $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/location/batchget?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:创建卡券 *******************************************************/ publicfunctionwxCardCreated($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/create?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:查询卡券详情 *******************************************************/ publicfunctionwxCardGetInfo($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/get?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:设置白名单 *******************************************************/ publicfunctionwxCardWhiteList($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/testwhitelist/set?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:消耗卡券 *******************************************************/ publicfunctionwxCardConsume($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/code/consume?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:删除卡券 *******************************************************/ publicfunctionwxCardDelete($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/delete?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:选择卡券-解析CODE *******************************************************/ publicfunctionwxCardDecryptCode($jsonData){ $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/code/decrypt?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:更改库存 *******************************************************/ publicfunctionwxCardModifyStock($cardId,$increase_stock_value=0,$reduce_stock_value=0){ if(intval($increase_stock_value)==0&&intval($reduce_stock_value)==0){ returnfalse; } $jsonData=json_encode(array("card_id"=>$cardId,'increase_stock_value'=>intval($increase_stock_value),'reduce_stock_value'=>intval($reduce_stock_value))); $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/modifystock?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } /******************************************************* *微信卡券:查询用户CODE *******************************************************/ publicfunctionwxCardQueryCode($code,$cardId=''){ $jsonData=json_encode(array("code"=>$code,'card_id'=>$cardId)); $wxAccessToken=$this->wxAccessToken(); $url="https://api.weixin.qq.com/card/code/get?access_token=".$wxAccessToken; $result=$this->wxHttpsRequest($url,$jsonData); $jsoninfo=json_decode($result,true); return$jsoninfo; } }
分享实例:
<?php require_once'lib.inc.php'; $wx=newWxApi(); if(!isset($_GET['code'])){ header("location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxApi::appId."&redirect_uri=http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."&response_type=code&scope=snsapi_base&state=1#wechat_redirect"); } else{ $CODE=$_GET['code']; $Info=$wx->wxOauthAccessToken($CODE); //print_r($Info); $openId=$Info['openid']; } $signPackage=$wx->wxJsapiPackage(); ?> <html> <head> <title>JSAPI接口测试</title> <metacharset="UTF-8"> <metaname="viewport"content="width=device-width,initial-scale=1.0"> <scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> wx.config({ debug:true, appId:'<?phpecho$signPackage["appId"];?>', timestamp:<?phpecho$signPackage["timestamp"];?>, nonceStr:'<?phpecho$signPackage["nonceStr"];?>', signature:'<?phpecho$signPackage["signature"];?>', jsApiList:[ //所有要调用的API都要加到这个列表中 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function(){ //在这里调用API wx.onMenuShareAppMessage({ title:'互联网之子', desc:'在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。', link:'http://movie.douban.com/subject/25785114/', imgUrl:'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger:function(res){ //不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 alert('用户点击发送给朋友'); }, success:function(res){ alert('已分享'); }, cancel:function(res){ alert('已取消'); }, fail:function(res){ alert(JSON.stringify(res)); } }); wx.onMenuShareTimeline({ title:'互联网之子', link:'http://movie.douban.com/subject/25785114/', imgUrl:'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger:function(res){ //不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 alert('用户点击分享到朋友圈'); }, success:function(res){ alert('已分享'); }, cancel:function(res){ alert('已取消'); }, fail:function(res){ alert(JSON.stringify(res)); } }); }); varreadyFunc=functiononBridgeReady(){ document.querySelector('#batchAddCard').addEventListener('click',function(e){ WeixinJSBridge.invoke('batchAddCard',{ "card_list":[<?phpecho$kqInfo;?>] }, function(res){ alert(res.err_msg+"_"+res.card_list); }); }); } if(typeofWeixinJSBridge==="undefined"){ document.addEventListener('WeixinJSBridgeReady',readyFunc,false); } else{ readyFunc(); } </script> </head> <body> <div> <inputtype="button"id="batchAddCard"name="batchAddCard"value="添加卡券"/> </div> </body> </html>
<?php /** *Descriptionofwechat * *@authorAdministrator */ classWeChatextendsWxApi{ public$token=""; //putyourcodehere publicfunction__construct($token=""){ parent::__construct(); $this->token=$token; } publicfunctionwcCheckSignature(){ try{ if(empty($this->token)){ thrownewException('TOKENisnotdefined!'); } $signature=$_GET["signature"]; $timestamp=$_GET["timestamp"]; $nonce=$_GET["nonce"]; $token=$this->token; $tmpArr=array($token,$timestamp,$nonce); //useSORT_STRINGrule sort($tmpArr,SORT_STRING); $tmpStr=implode($tmpArr); $tmpStr=sha1($tmpStr); if($tmpStr==$signature){ returntrue; }else{ returnfalse; } } catch(Exception$e){ echo'Message:'.$e->getMessage(); } } publicfunctionwcValid(){ $echoStr=isset($_GET["echostr"])&&!empty($_GET["echostr"])?addslashes($_GET["echostr"]):NULL; if(is_null($echoStr)){ $this->wcMsg(); } else{ //validsignature,option if($this->wcCheckSignature()){ echo$echoStr; exit; } else{ exit(); } } } publicfunctionwcMsg(){ //getpostdata,Maybeduetothedifferentenvironments $postStr=isset($GLOBALS["HTTP_RAW_POST_DATA"])&&!empty($GLOBALS["HTTP_RAW_POST_DATA"])?$GLOBALS["HTTP_RAW_POST_DATA"]:""; if(!empty($postStr)){ libxml_disable_entity_loader(true); $postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA); $this->zcLog(TRUE,$postObj); $fromUsername=$postObj->FromUserName; $toUsername=$postObj->ToUserName; $MsgType=$postObj->MsgType; if($MsgType=='event'){//执行事件相应 $Event=$postObj->Event; switch($Event){ case'subscribe'://关注 break; case'unsubscribe'://取消关注 break; case'SCAN'://扫描 break; case'LOCATION'://地址 break; case'CLICK'://点击时间 break; case'VIEW'://跳转 break; case'card_pass_check'://卡券审核通过 break; case'card_not_pass_check'://卡券审核失败 break; case'user_get_card'://用户领取卡券 break; case'user_del_card'://用户删除卡券 break; case'user_view_card'://用户浏览会员卡 break; case'user_consume_card'://用户核销卡券 break; case'kf_create_session'://创建会话 break; case'kf_close_session'://关闭会话 break; case'kf_switch_session'://转接会话 break; default: break; } } else{ switch($MsgType){ case'text'://文本格式 break; case'image'://图片格式 break; case'voice'://声音 break; case'video'://视频 break; case'shortvideo'://小视频 break; case'location'://上传地理位置 break; case'link'://链接相应 break; default: break; } } //////////////////////////////////////////////////////////////////// $keyword=trim($postObj->Content); $time=time(); $textTpl="<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty($keyword)){ $msgType="text"; $contentStr="Welcometowechatworld!"; $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr); echo$resultStr; } else{ echo"Inputsomething..."; } //////////////////////////////////////////////////////////////////// } else{ echo"暂时没有任何信息!"; exit; } } //日志LOG publicfunctionzcLog($errcode,$errmsg){ $this->returnAy=array(); $this->returnAy['errcode']=$errcode; $this->returnAy['errmsg']=$errmsg; $this->returnAy['errtime']=date("Y-m-dH:i:s",time()); $logfile=fopen("logfile_".date("Ymd",time()).".txt","a+"); $txt=json_encode($this->returnAy)."\n"; fwrite($logfile,$txt); fclose($logfile); //return$this->returnAy; } }
以上就是为大家分享的全部内容,希望对大家的学习有所帮助。