這篇文章介紹的內(nèi)容是關(guān)于微信API接口 ,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下
本文給大家介紹的是個(gè)人總結(jié)的一些微信API接口,包括微信支付、微信紅包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以參考下。
微信入口綁定,微信事件處理,微信API全部操作包含在這些文件中。
微信支付、微信紅包、微信卡券、微信小店。
1. [代碼]index.php? ??
<?php include_once 'lib.inc.php'; $wcObj = new WeChat("YOUKUIYUAN"); $wcObj->wcValid();
2. [代碼]微信入口類
<?php /** * Description of wechat * * @author Administrator */ class WeChat extends WxApi{ public $token = ""; //put your code here public function __construct($token = "") { parent::__construct(); $this->token = $token; } public function wcCheckSignature(){ try{ if (empty($this->token)) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = $this->token; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } catch (Exception $e) { echo 'Message: ' .$e->getMessage(); } } public function wcValid(){ $echoStr = isset($_GET["echostr"]) && !empty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL; if(is_null($echoStr)){ $this->wcMsg(); } else{ //valid signature , option if($this->wcCheckSignature()){ echo $echoStr; exit; } else{ exit(); } } } public function wcMsg(){ //get post data, May be due to the different environments $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'){//執(zhí)行事件相應(yīng) $Event = $postObj->Event; switch ($Event) { case 'subscribe'://關(guān)注 break; case 'unsubscribe'://取消關(guān)注 break; case 'SCAN'://掃描 break; case 'LOCATION'://地址 break; case 'CLICK'://點(diǎn)擊時(shí)間 break; case 'VIEW'://跳轉(zhuǎn) break; case 'card_pass_check'://卡券審核通過(guò) break; case 'card_not_pass_check'://卡券審核失敗 break; case 'user_get_card'://用戶領(lǐng)取卡券 break; case 'user_del_card'://用戶刪除卡券 break; case 'user_view_card'://用戶瀏覽會(huì)員卡 break; case 'user_consume_card'://用戶核銷卡券 break; case 'merchant_order'://微小店用戶下單付款 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'://鏈接相應(yīng) 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 = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; } else{ echo "Input something..."; } //////////////////////////////////////////////////////////////////// } else{ echo "暫時(shí)沒(méi)有任何信息!"; exit; } } //日志LOG public function zcLog($errcode , $errmsg){ $this->returnAy = array(); $this->returnAy['errcode'] = $errcode; $this->returnAy['errmsg'] = $errmsg; $this->returnAy['errtime'] = date("Y-m-d H: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; } }
3. [代碼]微信操作類 - 更新了自定義菜單部分
<?php /******************************************************** * @author Kyler You <QQ:2444756311> * @link http://mp.weixin.qq.com/wiki/home/index.html * @version 2.0.1 * @uses $wxApi = new WxApi(); * @package 微信API接口 陸續(xù)會(huì)繼續(xù)進(jìn)行更新 ********************************************************/ class WxApi { //const appId = ""; //const appSecret = ""; const appId = ""; const appSecret = ""; //const mchid = ""; //商戶號(hào) //const privatekey = ""; //私鑰 public $parameters = array(); public function __construct(){ } /**************************************************** * 微信提交API方法,返回微信指定JSON ****************************************************/ public function wxHttpsRequest($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; } /**************************************************** * 微信帶證書提交數(shù)據(jù) - 微信紅包使用 ****************************************************/ public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){ $ch = curl_init(); //超時(shí)時(shí)間 curl_setopt($ch,CURLOPT_TIMEOUT,$second); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); //這里設(shè)置代理,如果有的話 //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 分別屬于兩個(gè).pem文件 //默認(rèn)格式為PEM,可以注釋 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem'); //默認(rèn)格式為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'); //第二種方式,兩個(gè)文件合成一個(gè).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 "call faild, errorCode:$error\n"; curl_close($ch); return false; } } /**************************************************** * 微信獲取AccessToken 返回指定微信公眾號(hào)的at信息 ****************************************************/ public function wxAccessToken($appId = NULL , $appSecret = NULL){ $appId = is_null($appId) ? self::appId : $appId; $appSecret = is_null($appSecret) ? self::appSecret : $appSecret; $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time()) { //echo $appId,$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"]; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token; } /**************************************************** * 微信獲取AccessToken 返回指定微信公眾號(hào)的at信息 ****************************************************/ public function wxJsApiTicket($appId = NULL , $appSecret = NULL){ $appId = is_null($appId) ? self::appId : $appId; $appSecret = is_null($appSecret) ? self::appSecret : $appSecret; $data = json_decode(file_get_contents("jsapi_ticket.json")); if ($data->expire_time < time()) { $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']; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket; } /**************************************************** * 微信通過(guò)OPENID獲取用戶信息,返回?cái)?shù)組 ****************************************************/ public function wxGetUser($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 ****************************************************/ public function wxQrCodeTicket($jsonData){ $wxAccessToken = $this->wxAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken; $result = $this->wxHttpsRequest($url,$jsonData); return $result; } /**************************************************** * 微信通過(guò)ticket生成二維碼 ****************************************************/ public function wxQrCode($ticket){ $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket); return $url; } /**************************************************** * 發(fā)送自定義的模板消息 ****************************************************/ public function wxSetSend($touser, $template_id, $url, $data, $topcolor = '#7B68EE'){ $template = array( 'touser' => $touser, 'template_id' => $template_id, 'url' => $url, 'topcolor' => $topcolor, 'data' => $data ); $jsonData = json_encode($template); $result = $this->wxSendTemplate($jsonData); return $result; } /**************************************************** * 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_base //驗(yàn)證時(shí)不返回確認(rèn)頁(yè)面,只能獲取OPENID ****************************************************/ public function wxOauthBase($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; } /**************************************************** * 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_userinfo //獲取用戶完整信息 ****************************************************/ public function wxOauthUserinfo($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跳轉(zhuǎn)指定URL ****************************************************/ public function wxHeader($url){ header("location:".$url); } /**************************************************** * 微信通過(guò)OAUTH返回頁(yè)面中獲取AT信息 ****************************************************/ public function wxOauthAccessToken($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; } /**************************************************** * 微信通過(guò)OAUTH的Access_Token的信息獲取當(dāng)前用戶信息 // 只執(zhí)行在snsapi_userinfo模式運(yùn)行 ****************************************************/ public function wxOauthUser($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; } /**************************************************** * 創(chuàng)建自定義菜單 ****************************************************/ public function wxMenuCreate($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; } /**************************************************** * 獲取自定義菜單 ****************************************************/ public function wxMenuGet(){ $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; } /**************************************************** * 刪除自定義菜單 ****************************************************/ public function wxMenuDelete(){ $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; } /**************************************************** * 獲取第三方自定義菜單 ****************************************************/ public function wxMenuGetInfo(){ $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; } /***************************************************** * 生成隨機(jī)字符串 - 最長(zhǎng)為32位字符串 *****************************************************/ public function wxNonceStr($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){ return strtoupper(md5(time() . $str)); } else { return $str; } } /******************************************************* * 微信商戶訂單號(hào) - 最長(zhǎng)28位字符串 *******************************************************/ public function wxMchBillno($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); } return date("Ymd",time()).time().$mchid; } /******************************************************* * 微信格式化數(shù)組變成參數(shù)格式 - 支持url加密 *******************************************************/ public function wxSetParam($parameters){ if(is_array($parameters) && !empty($parameters)){ $this->parameters = $parameters; return $this->parameters; } else{ return array(); } } /******************************************************* * 微信格式化數(shù)組變成參數(shù)格式 - 支持url加密 *******************************************************/ public function wxFormatArray($parameters = NULL, $urlencode = FALSE){ if(is_null($parameters)){ $parameters = $this->parameters; } $restr = "";//初始化空 ksort($parameters);//排序參數(shù) foreach ($parameters as $k => $v){//循環(huán)定制參數(shù) if (null != $v && "null" != $v && "sign" != $k) { if($urlencode){//如果參數(shù)需要增加URL加密就增加,不需要?jiǎng)t不需要 $v = urlencode($v); } $restr .= $k . "=" . $v . "&";//返回完整字符串 } } if (strlen($restr) > 0) {//如果存在數(shù)據(jù)則將最后“&”刪除 $restr = substr($restr, 0, strlen($restr)-1); } return $restr;//返回字符串 } /******************************************************* * 微信MD5簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法] *******************************************************/ public function wxMd5Sign($content, $privatekey){ try { if (is_null($privatekey)) { throw new Exception("財(cái)付通簽名key不能為空!"); } if (is_null($content)) { throw new Exception("財(cái)付通簽名內(nèi)容不能為空"); } $signStr = $content . "&key=" . $privatekey; return strtoupper(md5($signStr)); } catch (Exception $e) { die($e->getMessage()); } } /******************************************************* * 微信Sha1簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法] *******************************************************/ public function wxSha1Sign($content){ try { if (is_null($content)) { throw new Exception("簽名內(nèi)容不能為空"); } //$signStr = $content; return sha1($content); } catch (Exception $e) { die($e->getMessage()); } } /******************************************************* * 微信jsApi整合方法 - 通過(guò)調(diào)用此方法獲得jsapi數(shù)據(jù) *******************************************************/ public function wxJsapiPackage(){ $jsapi_ticket = $this->wxJsApiTicket(); // 注意 URL 一定要?jiǎng)討B(tài)獲取,不能 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 ); // 這里參數(shù)的順序要按照 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; } /******************************************************* * 將數(shù)組解析XML - 微信紅包接口 *******************************************************/ public function wxArrayToXml($parameters = NULL){ if(is_null($parameters)){ $parameters = $this->parameters; } if(!is_array($parameters) || empty($parameters)){ die("參數(shù)不為數(shù)組無(wú)法解析"); } $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; } /******************************************************* * 微信卡券:上傳LOGO - 需要改寫動(dòng)態(tài)功能 *******************************************************/ public function wxCardUpdateImg() { $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" } } /******************************************************* * 微信卡券:獲取顏色 *******************************************************/ public function wxCardColor(){ $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; } /******************************************************* * 微信卡券:創(chuàng)建卡券 *******************************************************/ public function wxCardCreated($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; } /******************************************************* * 微信卡券:JSAPI 卡券Package - 基礎(chǔ)參數(shù)沒(méi)有附帶任何值 - 再生產(chǎn)環(huán)境中需要根據(jù)實(shí)際情況進(jìn)行修改 *******************************************************/ public function wxCardPackage($cardId){ $timestamp = time(); $api_ticket = $this->wxJsApiTicket(); $cardId = $cardId; $arrays = array($api_ticket,$timestamp,$cardId); sort($arrays); $string = sha1(implode("",$arrays)); $resultArray['card_id'] = $cardId; $resultArray['card_ext'] = array(); $resultArray['card_ext']['openid'] = 'oOmn4s9MiwqHSNNvPn0dBtU23toA'; $resultArray['card_ext']['timestamp'] = $timestamp; $resultArray['card_ext']['signature'] = $string; return $resultArray; } }
4. [代碼]微信JSAPI
<?php require_once 'lib.inc.php'; $wx = new WxApi(); //通過(guò)網(wǎng)頁(yè)獲取openid //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(); //print_r($signPackage); $kqInfo = $wx->wxCardPackage(""); $listInfo = $wx->wxCardListPackage(); ?> <html> <head> <title>JSAPI接口測(cè)試</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> </head> <body> <p> <input type="button" id="batchAddCard" name="batchAddCard" value="添加卡券" /><br /> <input type="button" id="openCard" name="openCard" value="拉起卡券庫(kù)" /><br /> <input type="button" id="ShareTimeLine" name="ShareTimeLine" value="分享朋友圈" /><br /> <p id="showInfo"> </p> </p> <script> wx.config({ debug: false, appId: '<?php echo $signPackage["appId"];?>', timestamp: <?php echo $signPackage["timestamp"];?>, nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ // 所有要調(diào)用的 API 都要加到這個(gè)列表中 'onMenuShareTimeline', 'onMenuShareAppMessage', 'addCard', 'openCard' ] }); wx.ready(function () { // 在這里調(diào)用 API wx.onMenuShareAppMessage({ title: '互聯(lián)網(wǎng)之子', desc: '在長(zhǎng)大的過(guò)程中,我才慢慢發(fā)現(xiàn),我身邊的所有事,別人跟我說(shuō)的所有事,那些所謂本來(lái)如此,注定如此的事,它們其實(shí)沒(méi)有非得如此,事情是可以改變的。更重要的是,有些事既然錯(cuò)了,那就該做出改變。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回 alert('用戶點(diǎn)擊發(fā)送給朋友'); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); document.querySelector('#ShareTimeLine').onclick = function () { wx.onMenuShareTimeline({ title: '互聯(lián)網(wǎng)之子', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回 alert('用戶點(diǎn)擊分享到朋友圈'); }, success: function (res) { alert('已分享'); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); }; document.querySelector('#batchAddCard').onclick = function () { wx.addCard({ cardList: [ { cardId: 'p7G0Cj_1HGF2nijO4sTlVTzawFhI', cardExt: '{"timestamp":"<?php echo $kqInfo['cardExt']['timestamp'];?>", "signature":"<?php echo $kqInfo['cardExt']['signature'];?>"}' } ], success: function (res) { var cardList = res.cardList; // 添加的卡券列表信息 alert(cardList); }, cancel: function (res) { alert('已取消'); }, fail: function (res) { alert(JSON.stringify(res)); } }); }; var shareData = { title: '微信JS-SDK Demo', desc: '微信JS-SDK,幫助第三方為用戶提供更優(yōu)質(zhì)的移動(dòng)web服務(wù)', link: 'http://demo.open.weixin.qq.com/jssdk/', imgUrl: 'http://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRt8Qia4lv7k3M9J1SKqKCImxJCt7j9rHYicKDI45jRPBxdzdyREWnk0ia0N5TMnMfth7SdxtzMvVgXg/0' }; wx.onMenuShareAppMessage(shareData); wx.onMenuShareTimeline(shareData); }); var readyFunc = function onBridgeReady() { // 綁定關(guān)注事件 document.querySelector('#openCard').addEventListener('click', function(e) { WeixinJSBridge.invoke('chooseCard', { "app_id": "<?php echo $listInfo['app_id']?>", "location_id ": '', "sign_type": "SHA1", "card_sign": "<?php echo $listInfo['card_sign']?>", "card_id": "<?php echo $listInfo['card_id']?>", "card_type": "<?php echo $listInfo['card_type']?>", "time_stamp": "<?php echo $listInfo['time_stamp']?>", "nonce_str": "<?php echo $listInfo['nonce_str']?>" }, function(res) { alert(res.err_msg + res.choose_card_info); $("#showInfo").empty().append(res.err_msg + res.choose_card_info); }); }); } if (typeof WeixinJSBridge === "undefined") { document.addEventListener('WeixinJSBridgeReady', readyFunc, false); } else { readyFunc(); } </script> </body> </html>
5. [代碼]創(chuàng)建卡券
$kqinfo = array("card" => array()); $kqinfo['card']['card_type'] = 'GENERAL_COUPON'; $kqinfo['card']['general_coupon'] = array('base_info' => array(), 'default_detail' => array()); $kqinfo['card']['general_coupon']['base_info']['logo_url'] = 'URL'; $kqinfo['card']['general_coupon']['base_info']['code_type'] = 'CODE_TYPE_QRCODE'; $kqinfo['card']['general_coupon']['base_info']['brand_name'] = ''; $kqinfo['card']['general_coupon']['base_info']['title'] = '測(cè)試卡券'; $kqinfo['card']['general_coupon']['base_info']['color'] = 'Color030'; $kqinfo['card']['general_coupon']['base_info']['notice'] = '測(cè)試測(cè)試測(cè)試'; $kqinfo['card']['general_coupon']['base_info']['description'] = '這是一張優(yōu)惠券'; $kqinfo['card']['general_coupon']['base_info']['date_info']['type'] = 1; $kqinfo['card']['general_coupon']['base_info']['date_info']['begin_timestamp'] = time(); $kqinfo['card']['general_coupon']['base_info']['date_info']['end_timestamp'] = time() + 100 * 24 * 3600; $kqinfo['card']['general_coupon']['base_info']['sku']['quantity'] = 100000; $kqinfo['card']['general_coupon']['default_detail'] = '測(cè)試數(shù)據(jù)\n測(cè)試數(shù)據(jù)\n測(cè)試數(shù)據(jù)'; //var_dump($kqinfo); //$kqinfo = json_encode($kqinfo); $kqinfo = C::enJson($kqinfo); //print_r( $kqinfo); //$resultData = $wx->wxCardCreated($kqinfo);
相關(guān)推薦:
The above is the detailed content of WeChat API interface. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Copying comics is undoubtedly a treasure that cannot be missed. Here you can find basketball comics in various styles, from passionate and inspiring competitive stories to relaxed and humorous daily comedy. Whether you want to relive the classics or discover new works, copying comics can meet your needs. Through the authentic online reading portal provided by copy comics, you will bid farewell to the trouble of pirated resources, enjoy a high-definition and smooth reading experience, and can support your favorite comic authors and contribute to the development of authentic comics.

Combining the latest industry trends and multi-dimensional evaluation data in 2025, the following are the top ten comprehensive AI writing software recommendations, covering mainstream scenarios such as general creation, academic research, and commercial marketing, while taking into account Chinese optimization and localization services:

Nice Comics, an immersive reading experience platform dedicated to creating for comic lovers, brings together a large number of high-quality comic resources at home and abroad. It is not only a comic reading platform, but also a community that connects comic artists and readers and shares comic culture. Through simple and intuitive interface design and powerful search functions, NES Comics allows you to easily find your favorite works and enjoy a smooth and comfortable reading experience. Say goodbye to the long waiting and tedious operations, enter the world of Nice comics immediately and start your comic journey!

Frogman Comics has become the first choice for many comic lovers with its rich and diverse comic resources and convenient and smooth online reading experience. It is like a vibrant pond, with fresh and interesting stories constantly emerging, waiting for you to discover and explore. Frog Man comics cover a variety of subjects, from passionate adventures to sweet love, from fantasy and science fiction to suspense reasoning, no matter which genre you like, you can find your favorite works here. Its simple and intuitive interface design allows you to easily get started, quickly find the comics you want to read, and immerse yourself in the exciting comic world.

Here, you can enjoy the vast ocean of comics and explore works of various themes and styles, from passionate young man comics to delicate and moving girl comics, from suspenseful and brain-burning mystery comics to relaxed and funny daily comics, there is everything, and there is always one that can touch your heartstrings. We not only have a large amount of genuine comic resources, but also constantly introduce and update the latest works to ensure that you can read your favorite comics as soon as possible.

The latest official website of 2025b Announce is: https://www.marketwebb.co/zh-CN/join?ref=507720986&type=wenzi; Binance Exchange is a global cryptocurrency exchange that serves 180 countries and regions including North America, Europe, Taiwan, the Middle East, Hong Kong, and Malaysia. It provides more than 600 cryptocurrencies and has 270 million registered users worldwide.

Android mobile phone users can download and install Huobi/Huobi App through the following steps: 1. Ensure the network is stable and the storage space is sufficient; 2. Download the App through Huobi/Huobi official website, use the browser to access the official website and click the download link or scan the QR code, or search and download through third-party application stores such as AppTreasure and Huawei App Market, and you can also obtain the installation package through friends' sharing; 3. Find the downloaded .apk file, enable the "Unknown Source App" installation permission, follow the prompts to complete the installation, etc.

The steps for downloading and installing the Yiou Exchange (OKX) Android client are as follows: 1. Download the official genuine installation package through the official website www.okx.com or the official QR code; 2. Find the downloaded .apk file in the mobile phone file manager and enable the "Unknown Source" installation permission; 3. Click the installation package to install, and after the installation is completed, open the APP and register or log in to the account; 4. Set up complex passwords, enable secondary verification, regularly change passwords, properly keep private keys and mnemonics, and beware of phishing websites to ensure account security.
