微信API接口大全,信API接口大全
Jun 13, 2016 am 09:06 AM微信API接口大全,信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í)行事件相應 $Event = $postObj->Event; switch ($Event) { case 'subscribe'://關(guān)注 break; case 'unsubscribe'://取消關(guān)注 break; case 'SCAN'://掃描 break; case 'LOCATION'://地址 break; case 'CLICK'://點擊時間 break; case 'VIEW'://跳轉(zhuǎn) break; case 'card_pass_check'://卡券審核通過 break; case 'card_not_pass_check'://卡券審核失敗 break; case 'user_get_card'://用戶領(lǐng)取卡券 break; case 'user_del_card'://用戶刪除卡券 break; case 'user_view_card'://用戶瀏覽會員卡 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'://鏈接相應 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 "暫時沒有任何信息!"; 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ù)會繼續(xù)進行更新 ********************************************************/ class WxApi { //const appId = ""; //const appSecret = ""; const appId = ""; const appSecret = ""; //const mchid = ""; //商戶號 //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(); //超時時間 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 分別屬于兩個.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 "call faild, errorCode:$error\n"; curl_close($ch); return false; } } /**************************************************** * 微信獲取AccessToken 返回指定微信公眾號的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 返回指定微信公眾號的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; } /**************************************************** * 微信通過OPENID獲取用戶信息,返回數(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; } /**************************************************** * 微信通過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 //驗證時不返回確認頁面,只能獲取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); } /**************************************************** * 微信通過OAUTH返回頁面中獲取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; } /**************************************************** * 微信通過OAUTH的Access_Token的信息獲取當前用戶信息 // 只執(zhí)行在snsapi_userinfo模式運行 ****************************************************/ 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; } /***************************************************** * 生成隨機字符串 - 最長為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; } } /******************************************************* * 微信商戶訂單號 - 最長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加密就增加,不需要則不需要 $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("財付通簽名key不能為空!"); } if (is_null($content)) { throw new Exception("財付通簽名內(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整合方法 - 通過調(diào)用此方法獲得jsapi數(shù)據(jù) *******************************************************/ public function wxJsapiPackage(){ $jsapi_ticket = $this->wxJsApiTicket(); // 注意 URL 一定要動態(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ù)組無法解析"); } $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 - 需要改寫動態(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ù)沒有附帶任何值 - 再生產(chǎn)環(huán)境中需要根據(jù)實際情況進行修改 *******************************************************/ 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(); //通過網(wǎng)頁獲取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接口測試</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> <div> <input type="button" id="batchAddCard" name="batchAddCard" value="添加卡券" /><br /> <input type="button" id="openCard" name="openCard" value="拉起卡券庫" /><br /> <input type="button" id="ShareTimeLine" name="ShareTimeLine" value="分享朋友圈" /><br /> <div id="showInfo"> </div> </div> <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 都要加到這個列表中 'onMenuShareTimeline', 'onMenuShareAppMessage', 'addCard', 'openCard' ] }); wx.ready(function () { // 在這里調(diào)用 API wx.onMenuShareAppMessage({ title: '互聯(lián)網(wǎng)之子', desc: '在長大的過程中,我才慢慢發(fā)現(xiàn),我身邊的所有事,別人跟我說的所有事,那些所謂本來如此,注定如此的事,它們其實沒有非得如此,事情是可以改變的。更重要的是,有些事既然錯了,那就該做出改變。', link: 'http://movie.douban.com/subject/25785114/', imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg', trigger: function (res) { // 不要嘗試在trigger中使用ajax異步請求修改本次分享的內(nèi)容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回 alert('用戶點擊發(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異步請求修改本次分享的內(nèi)容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回 alert('用戶點擊分享到朋友圈'); }, 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ì)的移動web服務', 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'] = '測試卡券'; $kqinfo['card']['general_coupon']['base_info']['color'] = 'Color030'; $kqinfo['card']['general_coupon']['base_info']['notice'] = '測試測試測試'; $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'] = '測試數(shù)據(jù)\n測試數(shù)據(jù)\n測試數(shù)據(jù)'; //var_dump($kqinfo); //$kqinfo = json_encode($kqinfo); $kqinfo = C::enJson($kqinfo); //print_r( $kqinfo); //$resultData = $wx->wxCardCreated($kqinfo);
以上所述就是本文的全部內(nèi)容,希望大家能夠喜歡。

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le portail de connexion pour la version Web Douyin est https://www.douyin.com/. Les étapes de connexion incluent: 1. Ouvrez le navigateur; 2. Entrez l'URL https://www.douyin.com/; 3. Cliquez sur le bouton "Connexion" et sélectionnez la méthode de connexion; 4. Entrez le mot de passe du compte; 5. Connexion complète. La version Web fournit des fonctions telles que la navigation, la recherche, l'interaction, le téléchargement des vidéos et la gestion de la page d'accueil personnelle, et présente des avantages tels que l'expérience grand écran, le multitache, la gestion des comptes et les statistiques de données pratiques.

La copie des bandes dessinées est sans aucun doute un trésor qui ne peut pas être manqué. Ici, vous pouvez trouver des bandes dessinées de basket-ball dans divers styles, des histoires compétitives passionnées et inspirantes à une comédie quotidienne détendue et humoristique. Que vous souhaitiez revivre les classiques ou découvrir de nouvelles ?uvres, la copie des bandes dessinées peut répondre à vos besoins. Grace au portail de lecture en ligne authentique fourni par Copy Comics, vous ferez des adieux aux problèmes de ressources piratées, profiterez d'une expérience de lecture haute définition et fluide, et pouvez soutenir vos auteurs de bandes dessinées préférés et contribuer au développement de bandes dessinées authentiques.

Le choix du navigateur UC ou du navigateur QQ dépend de vos besoins: 1. Le navigateur UC convient aux utilisateurs qui poursuivent un chargement rapide et des fonctions de divertissement riches; 2. QQ Browser convient aux utilisateurs qui ont besoin de stabilité et de connexion transparente avec les produits Tencent.

En combinant les dernières tendances de l'industrie et les données d'évaluation multidimensionnelles en 2025, ce qui suit est les dix premières recommandations de logiciels d'écriture d'IA complètes, couvrant des scénarios traditionnels tels que la création générale, la recherche universitaire et le marketing commercial, tout en prenant en compte les services d'optimisation chinoise et de localisation:

Nice Comics, une plate-forme d'expérience de lecture immersive dédiée à la création pour les amateurs de bandes dessinées, rassemble un grand nombre de ressources de bande dessinée de haute qualité au pays et à l'étranger. Ce n'est pas seulement une plate-forme de lecture de bandes dessinées, mais aussi une communauté qui relie les artistes comiques et les lecteurs et partage la culture comique. Grace à la conception d'interface simple et intuitive et aux fonctions de recherche puissantes, NES Comics vous permet de trouver facilement vos ?uvres préférées et de profiter d'une expérience de lecture fluide et confortable. Dites au revoir aux longues opérations en attente et fastidieuses, entrez immédiatement dans le monde de belles bandes dessinées et commencez votre voyage comique!

Frogman Comics est devenu le premier choix pour de nombreux amateurs de bandes dessinées avec ses ressources comiques riches et diverses et son expérience de lecture en ligne pratique et fluide. C'est comme un étang dynamique, avec des histoires fra?ches et intéressantes constamment en émergeant, attendant que vous découvriez et explorez. Frog Man Comics couvre une variété de sujets, des aventures passionnées au doux amour, de la fantaisie et de la science-fiction au raisonnement de suspense, quel que soit le genre que vous aimez, vous pouvez trouver vos ?uvres préférées ici. Sa conception d'interface simple et intuitive vous permet de démarrer facilement, de trouver rapidement les bandes dessinées que vous souhaitez lire et de vous immerger dans le monde de la bande dessinée passionnant.

Ici, vous pouvez profiter du vaste océan de bandes dessinées et explorer des ?uvres de divers thèmes et styles, de la bande dessinée passionnée des jeunes hommes aux bandes dessinées délicates et émouvantes, des bandes dessinées mystérieuses de suspense et de br?lure cérébrale aux bandes dessinées quotidiennes détendues et dr?les, il y a tout, et il y en a toujours une qui peut toucher vos cordes à c?ur. Nous avons non seulement une grande quantité de véritables ressources de bande dessinée, mais aussi en constante opinion et mettez également à jour les dernières ?uvres pour vous assurer que vous pouvez lire vos bandes dessinées préférées dès que possible.

Le dernier site officiel du 2025b Anhui est: https://www.marketwebb.co/zh-cn/join?ref=507720986& ;ype=wenzi; Binance Exchange est un échange mondial de crypto-monnaie qui dessert 180 pays et régions, notamment l'Amérique du Nord, l'Europe, Ta?wan, le Moyen-Orient, Hong Kong et la Malaisie. Il fournit plus de 600 crypto-monnaies et compte 270 millions d'utilisateurs enregistrés dans le monde.
