首页 > 开发 > PHP > 正文

微信API接口大全

2024-05-04 23:34:17
字体:
来源:转载
供稿:网友

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付、微信红包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以参考下。

微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中。

微信支付、微信红包、微信卡券、微信小店。

1. [代码]index.php

 

 
  1. <?php 
  2. include_once 'lib.inc.php'
  3.  
  4. $wcObj = new WeChat("YOUKUIYUAN"); 
  5. $wcObj->wcValid(); 

2. [代码]微信入口类

 

 
  1. <?php 
  2. /** 
  3. * Description of wechat 
  4. * 
  5. * @author Administrator 
  6. */ 
  7. class WeChat extends WxApi{ 
  8. public $token = ""
  9. //put your code here 
  10. public function __construct($token = "") { 
  11. parent::__construct(); 
  12. $this->token = $token
  13.  
  14. public function wcCheckSignature(){ 
  15. try{ 
  16. if (emptyempty($this->token)) { 
  17. throw new Exception('TOKEN is not defined!'); 
  18.  
  19. $signature = $_GET["signature"]; 
  20. $timestamp = $_GET["timestamp"]; 
  21. $nonce = $_GET["nonce"]; 
  22.  
  23. $token = $this->token; 
  24. $tmpArr = array($token$timestamp$nonce); 
  25. // use SORT_STRING rule 
  26. sort($tmpArr, SORT_STRING); 
  27. $tmpStr = implode( $tmpArr ); 
  28. $tmpStr = sha1( $tmpStr ); 
  29.  
  30. if$tmpStr == $signature ){ 
  31. return true; 
  32. }else
  33. return false; 
  34. }  
  35. catch (Exception $e) { 
  36. echo 'Message: ' .$e->getMessage(); 
  37.  
  38. public function wcValid(){ 
  39. $echoStr = isset($_GET["echostr"]) && !emptyempty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL; 
  40. if(is_null($echoStr)){ 
  41. $this->wcMsg(); 
  42. else
  43. //valid signature , option 
  44. if($this->wcCheckSignature()){ 
  45. echo $echoStr
  46. exit
  47. else
  48. exit(); 
  49.  
  50. public function wcMsg(){ 
  51. //get post data, May be due to the different environments 
  52. $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !emptyempty($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : ""
  53. if(!emptyempty($postStr)){ 
  54. libxml_disable_entity_loader(true); 
  55. $postObj = simplexml_load_string($postStr'SimpleXMLElement', LIBXML_NOCDATA); 
  56. $this->zcLog(TRUE,$postObj); 
  57.  
  58. $fromUsername = $postObj->FromUserName; 
  59. $toUsername = $postObj->ToUserName; 
  60. $MsgType = $postObj->MsgType; 
  61.  
  62. if($MsgType == 'event'){//执行事件相应 
  63. $Event = $postObj->Event; 
  64. switch ($Event) { 
  65. case 'subscribe'://关注 
  66. break
  67. case 'unsubscribe'://取消关注 
  68. break
  69. case 'SCAN'://扫描 
  70. break
  71. case 'LOCATION'://地址 
  72. break
  73. case 'CLICK'://点击时间 
  74. break
  75. case 'VIEW'://跳转 
  76. break
  77. case 'card_pass_check'://卡券审核通过 
  78. break
  79. case 'card_not_pass_check'://卡券审核失败 
  80. break
  81. case 'user_get_card'://用户领取卡券 
  82. break
  83. case 'user_del_card'://用户删除卡券 
  84. break
  85. case 'user_view_card'://用户浏览会员卡 
  86. break
  87. case 'user_consume_card'://用户核销卡券 
  88. break
  89. case 'merchant_order'://微小店用户下单付款 
  90. break
  91. default
  92. break
  93. else
  94. switch ($MsgType) { 
  95. case 'text'://文本格式 
  96. break
  97. case 'image'://图片格式 
  98. break
  99. case 'voice'://声音 
  100. break
  101. case 'video'://视频 
  102. break
  103. case 'shortvideo'://小视频 
  104. break
  105. case 'location'://上传地理位置 
  106. break
  107. case 'link'://链接相应 
  108. break
  109. default
  110. break
  111. }  
  112.  
  113. //////////////////////////////////////////////////////////////////// 
  114. $keyword = trim($postObj->Content); 
  115. $time = time(); 
  116. $textTpl = "<xml> 
  117. <ToUserName><![CDATA[%s]]></ToUserName> 
  118. <FromUserName><![CDATA[%s]]></FromUserName> 
  119. <CreateTime>%s</CreateTime> 
  120. <MsgType><![CDATA[%s]]></MsgType> 
  121. <Content><![CDATA[%s]]></Content> 
  122. <FuncFlag>0</FuncFlag> 
  123. </xml>";  
  124. if(!emptyempty$keyword )){ 
  125. $msgType = "text"
  126. $contentStr = "Welcome to wechat world!"
  127. $resultStr = sprintf($textTpl$fromUsername$toUsername$time$msgType$contentStr); 
  128. echo $resultStr
  129. else
  130. echo "Input something..."
  131. //////////////////////////////////////////////////////////////////// 
  132. else
  133. echo "暂时没有任何信息!"
  134. exit
  135.  
  136. //日志LOG 
  137. public function zcLog($errcode , $errmsg){ 
  138. $this->returnAy = array(); 
  139. $this->returnAy['errcode'] = $errcode
  140. $this->returnAy['errmsg'] = $errmsg
  141. $this->returnAy['errtime'] = date("Y-m-d H:i:s",time()); 
  142. $logfile = fopen("logfile_".date("Ymd",time()).".txt""a+"); 
  143. $txt = json_encode($this->returnAy)."/n"
  144. fwrite($logfile$txt); 
  145. fclose($logfile); 
  146. //return $this->returnAy; 
  147.  

3. [代码]微信操作类 - 更新了自定义菜单部分

 

 
  1. <?php 
  2. /******************************************************** 
  3. * @author Kyler You <QQ:2444756311> 
  4. * @link http://mp.weixin.qq.com/wiki/home/index.html 
  5. * @version 2.0.1 
  6. * @uses $wxApi = new WxApi(); 
  7. * @package 微信API接口 陆续会继续进行更新 
  8. ********************************************************/ 
  9.  
  10. class WxApi { 
  11. //const appId = ""; 
  12. //const appSecret = ""; 
  13. const appId = ""
  14. const appSecret = ""
  15. //const mchid = ""; //商户号 
  16. //const privatekey = ""; //私钥 
  17. public $parameters = array(); 
  18.  
  19. public function __construct(){ 
  20.  
  21.  
  22. /**************************************************** 
  23. * 微信提交API方法,返回微信指定JSON 
  24. ****************************************************/ 
  25.  
  26. public function wxHttpsRequest($url,$data = null){ 
  27. $curl = curl_init(); 
  28. curl_setopt($curl, CURLOPT_URL, $url); 
  29. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
  30. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
  31. if (!emptyempty($data)){ 
  32. curl_setopt($curl, CURLOPT_POST, 1); 
  33. curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
  34. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
  35. $output = curl_exec($curl); 
  36. curl_close($curl); 
  37. return $output
  38.  
  39. /**************************************************** 
  40. * 微信带证书提交数据 - 微信红包使用 
  41. ****************************************************/ 
  42.  
  43. public function wxHttpsRequestPem($url$vars$second=30,$aHeader=array()){ 
  44. $ch = curl_init(); 
  45. //超时时间 
  46. curl_setopt($ch,CURLOPT_TIMEOUT,$second); 
  47. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); 
  48. //这里设置代理,如果有的话 
  49. //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98'); 
  50. //curl_setopt($ch,CURLOPT_PROXYPORT, 8080); 
  51. curl_setopt($ch,CURLOPT_URL,$url); 
  52. curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); 
  53. curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); 
  54.  
  55. //以下两种方式需选择一种 
  56.  
  57. //第一种方法,cert 与 key 分别属于两个.pem文件 
  58. //默认格式为PEM,可以注释 
  59. curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); 
  60. curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/apiclient_cert.pem'); 
  61. //默认格式为PEM,可以注释 
  62. curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); 
  63. curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/apiclient_key.pem'); 
  64.  
  65. curl_setopt($ch,CURLOPT_CAINFO,'PEM'); 
  66. curl_setopt($ch,CURLOPT_CAINFO,getcwd().'/rootca.pem'); 
  67.  
  68. //第二种方式,两个文件合成一个.pem文件 
  69. //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem'); 
  70.  
  71. ifcount($aHeader) >= 1 ){ 
  72. curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader); 
  73.  
  74. curl_setopt($ch,CURLOPT_POST, 1); 
  75. curl_setopt($ch,CURLOPT_POSTFIELDS,$vars); 
  76. $data = curl_exec($ch); 
  77. if($data){ 
  78. curl_close($ch); 
  79. return $data
  80. else {  
  81. $error = curl_errno($ch); 
  82. echo "call faild, errorCode:$error/n";  
  83. curl_close($ch); 
  84. return false; 
  85.  
  86. /**************************************************** 
  87. * 微信获取AccessToken 返回指定微信公众号的at信息 
  88. ****************************************************/ 
  89.  
  90. public function wxAccessToken($appId = NULL , $appSecret = NULL){ 
  91. $appId = is_null($appId) ? self::appId : $appId
  92. $appSecret = is_null($appSecret) ? self::appSecret : $appSecret
  93.  
  94. $data = json_decode(file_get_contents("access_token.json")); 
  95. if ($data->expire_time < time()) { 
  96. //echo $appId,$appSecret; 
  97. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret
  98. $result = $this->wxHttpsRequest($url); 
  99. //print_r($result); 
  100. $jsoninfo = json_decode($result, true); 
  101. $access_token = $jsoninfo["access_token"]; 
  102. if ($access_token) { 
  103. $data->expire_time = time() + 7000; 
  104. $data->access_token = $access_token
  105. $fp = fopen("access_token.json""w"); 
  106. fwrite($fp, json_encode($data)); 
  107. fclose($fp); 
  108. else { 
  109. $access_token = $data->access_token; 
  110. return $access_token
  111.  
  112. /**************************************************** 
  113. * 微信获取AccessToken 返回指定微信公众号的at信息 
  114. ****************************************************/ 
  115.  
  116. public function wxJsApiTicket($appId = NULL , $appSecret = NULL){ 
  117. $appId = is_null($appId) ? self::appId : $appId
  118. $appSecret = is_null($appSecret) ? self::appSecret : $appSecret
  119.  
  120. $data = json_decode(file_get_contents("jsapi_ticket.json")); 
  121. if ($data->expire_time < time()) {  
  122. $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$this->wxAccessToken(); 
  123. $result = $this->wxHttpsRequest($url); 
  124. $jsoninfo = json_decode($result, true); 
  125. $ticket = $jsoninfo['ticket']; 
  126. if ($ticket) { 
  127. $data->expire_time = time() + 7000; 
  128. $data->jsapi_ticket = $ticket
  129. $fp = fopen("jsapi_ticket.json""w"); 
  130. fwrite($fp, json_encode($data)); 
  131. fclose($fp); 
  132. else { 
  133. $ticket = $data->jsapi_ticket; 
  134. return $ticket
  135.  
  136. /**************************************************** 
  137. * 微信通过OPENID获取用户信息,返回数组 
  138. ****************************************************/ 
  139.  
  140. public function wxGetUser($openId){ 
  141. $wxAccessToken = $this->wxAccessToken(); 
  142. $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN"
  143. $result = $this->wxHttpsRequest($url); 
  144. $jsoninfo = json_decode($result, true); 
  145. return $jsoninfo
  146. }  
  147.  
  148. /**************************************************** 
  149. * 微信生成二维码ticket 
  150. ****************************************************/ 
  151.  
  152. public function wxQrCodeTicket($jsonData){ 
  153. $wxAccessToken = $this->wxAccessToken(); 
  154. $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken
  155. $result = $this->wxHttpsRequest($url,$jsonData); 
  156. return $result
  157.  
  158. /**************************************************** 
  159. * 微信通过ticket生成二维码 
  160. ****************************************************/ 
  161. public function wxQrCode($ticket){ 
  162. $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket); 
  163. return $url
  164.  
  165. /**************************************************** 
  166. * 发送自定义的模板消息 
  167. ****************************************************/ 
  168.  
  169. public function wxSetSend($touser$template_id$url$data$topcolor = '#7B68EE'){ 
  170. $template = array
  171. 'touser' => $touser
  172. 'template_id' => $template_id
  173. 'url' => $url
  174. 'topcolor' => $topcolor
  175. 'data' => $data 
  176. ); 
  177. $jsonData = json_encode($template); 
  178. $result = $this->wxSendTemplate($jsonData); 
  179. return $result
  180.  
  181. /**************************************************** 
  182. * 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_base //验证时不返回确认页面,只能获取OPENID 
  183. ****************************************************/ 
  184.  
  185. public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){ 
  186. $appId = is_null($appId) ? self::appId : $appId
  187. $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect"
  188. return $url
  189.  
  190. /**************************************************** 
  191. * 微信设置OAUTH跳转URL,返回字符串信息 - SCOPE = snsapi_userinfo //获取用户完整信息 
  192. ****************************************************/ 
  193.  
  194. public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){ 
  195. $appId = is_null($appId) ? self::appId : $appId
  196. $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect"
  197. return $url
  198.  
  199. /**************************************************** 
  200. * 微信OAUTH跳转指定URL 
  201. ****************************************************/ 
  202.  
  203. public function wxHeader($url){ 
  204. header("location:".$url); 
  205.  
  206. /**************************************************** 
  207. * 微信通过OAUTH返回页面中获取AT信息 
  208. ****************************************************/ 
  209.  
  210. public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){ 
  211. $appId = is_null($appId) ? self::appId : $appId
  212. $appSecret = is_null($appSecret) ? self::appSecret : $appSecret
  213. $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code"
  214. $result = $this->wxHttpsRequest($url); 
  215. //print_r($result); 
  216. $jsoninfo = json_decode($result, true); 
  217. //$access_token = $jsoninfo["access_token"]; 
  218. return $jsoninfo;  
  219.  
  220. /**************************************************** 
  221. * 微信通过OAUTH的Access_Token的信息获取当前用户信息 // 只执行在snsapi_userinfo模式运行 
  222. ****************************************************/ 
  223.  
  224. public function wxOauthUser($OauthAT,$openId){ 
  225. $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN"
  226. $result = $this->wxHttpsRequest($url); 
  227. $jsoninfo = json_decode($result, true); 
  228. return $jsoninfo;  
  229.  
  230. /**************************************************** 
  231. * 创建自定义菜单 
  232. ****************************************************/ 
  233.  
  234. public function wxMenuCreate($jsonData){ 
  235. $wxAccessToken = $this->wxAccessToken(); 
  236. $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken
  237. $result = $this->wxHttpsRequest($url,$jsonData); 
  238. $jsoninfo = json_decode($result, true); 
  239. return $jsoninfo;  
  240.  
  241. /**************************************************** 
  242. * 获取自定义菜单 
  243. ****************************************************/ 
  244.  
  245. public function wxMenuGet(){ 
  246. $wxAccessToken = $this->wxAccessToken(); 
  247. $url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken
  248. $result = $this->wxHttpsRequest($url); 
  249. $jsoninfo = json_decode($result, true); 
  250. return $jsoninfo
  251.  
  252. /**************************************************** 
  253. * 删除自定义菜单 
  254. ****************************************************/ 
  255.  
  256. public function wxMenuDelete(){ 
  257. $wxAccessToken = $this->wxAccessToken(); 
  258. $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken
  259. $result = $this->wxHttpsRequest($url); 
  260. $jsoninfo = json_decode($result, true); 
  261. return $jsoninfo
  262.  
  263. /**************************************************** 
  264. * 获取第三方自定义菜单 
  265. ****************************************************/ 
  266.  
  267. public function wxMenuGetInfo(){ 
  268. $wxAccessToken = $this->wxAccessToken(); 
  269. $url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken
  270. $result = $this->wxHttpsRequest($url); 
  271. $jsoninfo = json_decode($result, true); 
  272. return $jsoninfo
  273.  
  274. /***************************************************** 
  275. * 生成随机字符串 - 最长为32位字符串 
  276. *****************************************************/ 
  277. public function wxNonceStr($length = 16, $type = FALSE) { 
  278. $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  279. $str = ""
  280. for ($i = 0; $i < $length$i++) { 
  281. $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); 
  282. if($type == TRUE){ 
  283. return strtoupper(md5(time() . $str)); 
  284. else { 
  285. return $str
  286.  
  287. /******************************************************* 
  288. * 微信商户订单号 - 最长28位字符串 
  289. *******************************************************/ 
  290.  
  291. public function wxMchBillno($mchid = NULL) { 
  292. if(is_null($mchid)){ 
  293. if(self::mchid == "" || is_null(self::mchid)){ 
  294. $mchid = time(); 
  295. else
  296. $mchid = self::mchid; 
  297. else
  298. $mchid = substr(addslashes($mchid),0,10); 
  299. return date("Ymd",time()).time().$mchid
  300.  
  301. /******************************************************* 
  302. * 微信格式化数组变成参数格式 - 支持url加密 
  303. *******************************************************/ 
  304.  
  305. public function wxSetParam($parameters){ 
  306. if(is_array($parameters) && !emptyempty($parameters)){ 
  307. $this->parameters = $parameters
  308. return $this->parameters; 
  309. else
  310. return array(); 
  311.  
  312. /******************************************************* 
  313. * 微信格式化数组变成参数格式 - 支持url加密 
  314. *******************************************************/ 
  315.  
  316. public function wxFormatArray($parameters = NULL, $urlencode = FALSE){ 
  317. if(is_null($parameters)){ 
  318. $parameters = $this->parameters; 
  319. $restr = "";//初始化空 
  320. ksort($parameters);//排序参数 
  321. foreach ($parameters as $k => $v){//循环定制参数 
  322. if (null != $v && "null" != $v && "sign" != $k) { 
  323. if($urlencode){//如果参数需要增加URL加密就增加,不需要则不需要 
  324. $v = urlencode($v); 
  325. $restr .= $k . "=" . $v . "&";//返回完整字符串 
  326. if (strlen($restr) > 0) {//如果存在数据则将最后“&”删除 
  327. $restr = substr($restr, 0, strlen($restr)-1); 
  328. return $restr;//返回字符串 
  329.  
  330. /******************************************************* 
  331. * 微信MD5签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法] 
  332. *******************************************************/ 
  333. public function wxMd5Sign($content$privatekey){ 
  334. try { 
  335. if (is_null($privatekey)) { 
  336. throw new Exception("财付通签名key不能为空!"); 
  337. if (is_null($content)) { 
  338. throw new Exception("财付通签名内容不能为空"); 
  339. $signStr = $content . "&key=" . $privatekey
  340. return strtoupper(md5($signStr)); 
  341. catch (Exception $e
  342. die($e->getMessage()); 
  343.  
  344. /******************************************************* 
  345. * 微信Sha1签名生成器 - 需要将参数数组转化成为字符串[wxFormatArray方法] 
  346. *******************************************************/ 
  347. public function wxSha1Sign($content){ 
  348. try { 
  349. if (is_null($content)) { 
  350. throw new Exception("签名内容不能为空"); 
  351. //$signStr = $content; 
  352. return sha1($content); 
  353. catch (Exception $e
  354. die($e->getMessage()); 
  355.  
  356. /******************************************************* 
  357. * 微信jsApi整合方法 - 通过调用此方法获得jsapi数据 
  358. *******************************************************/ 
  359. public function wxJsapiPackage(){ 
  360. $jsapi_ticket = $this->wxJsApiTicket(); 
  361.  
  362. // 注意 URL 一定要动态获取,不能 hardcode. 
  363. $protocol = (!emptyempty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"
  364. $url = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"]; 
  365.  
  366. $timestamp = time(); 
  367. $nonceStr = $this->wxNonceStr(); 
  368.  
  369. $signPackage = array
  370. "jsapi_ticket" => $jsapi_ticket
  371. "nonceStr" => $nonceStr
  372. "timestamp" => $timestamp
  373. "url" => $url 
  374. );  
  375.  
  376. // 这里参数的顺序要按照 key 值 ASCII 码升序排序 
  377. $rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"
  378.  
  379. //$rawString = $this->wxFormatArray($signPackage); 
  380. $signature = $this->wxSha1Sign($rawString); 
  381.  
  382. $signPackage['signature'] = $signature
  383. $signPackage['rawString'] = $rawString
  384. $signPackage['appId'] = self::appId; 
  385.  
  386. return $signPackage
  387.  
  388.  
  389. /******************************************************* 
  390. * 将数组解析XML - 微信红包接口 
  391. *******************************************************/ 
  392. public function wxArrayToXml($parameters = NULL){ 
  393. if(is_null($parameters)){ 
  394. $parameters = $this->parameters; 
  395.  
  396. if(!is_array($parameters) || emptyempty($parameters)){ 
  397. die("参数不为数组无法解析"); 
  398.  
  399. $xml = "<xml>"
  400. foreach ($arr as $key=>$val
  401. if (is_numeric($val)) 
  402. $xml.="<".$key.">".$val."</".$key.">";  
  403. else 
  404. $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";  
  405. $xml.="</xml>"
  406. return $xml;  
  407.  
  408. /******************************************************* 
  409. * 微信卡券:上传LOGO - 需要改写动态功能 
  410. *******************************************************/ 
  411. public function wxCardUpdateImg() { 
  412. $wxAccessToken = $this->wxAccessToken(); 
  413. //$data['access_token'] = $wxAccessToken; 
  414. $data['buffer'] = '@D://workspace//htdocs//yky_test//logo.jpg'
  415. $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken
  416. $result = $this->wxHttpsRequest($url,$data); 
  417. $jsoninfo = json_decode($result, true); 
  418. return $jsoninfo
  419. //array(1) { ["url"]=> string(121) "http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0" }  
  420.  
  421. /******************************************************* 
  422. * 微信卡券:获取颜色 
  423. *******************************************************/ 
  424. public function wxCardColor(){ 
  425. $wxAccessToken = $this->wxAccessToken(); 
  426. $url = "https://api.weixin.qq.com/card/getcolors?access_token=".$wxAccessToken
  427. $result = $this->wxHttpsRequest($url); 
  428. $jsoninfo = json_decode($result, true); 
  429. return $jsoninfo
  430.  
  431. /******************************************************* 
  432. * 微信卡券:创建卡券 
  433. *******************************************************/ 
  434. public function wxCardCreated($jsonData) { 
  435. $wxAccessToken = $this->wxAccessToken(); 
  436. $url = "https://api.weixin.qq.com/card/create?access_token=" . $wxAccessToken
  437. $result = $this->wxHttpsRequest($url,$jsonData); 
  438. $jsoninfo = json_decode($result, true); 
  439. return $jsoninfo
  440.  
  441. /******************************************************* 
  442. * 微信卡券:JSAPI 卡券Package - 基础参数没有附带任何值 - 再生产环境中需要根据实际情况进行修改 
  443. *******************************************************/ 
  444. public function wxCardPackage($cardId){ 
  445. $timestamp = time(); 
  446. $api_ticket = $this->wxJsApiTicket(); 
  447. $cardId = $cardId
  448. $arrays = array($api_ticket,$timestamp,$cardId); 
  449. sort($arrays); 
  450. $string = sha1(implode("",$arrays)); 
  451.  
  452. $resultArray['card_id'] = $cardId
  453. $resultArray['card_ext'] = array(); 
  454. $resultArray['card_ext']['openid'] = 'oOmn4s9MiwqHSNNvPn0dBtU23toA'
  455. $resultArray['card_ext']['timestamp'] = $timestamp
  456. $resultArray['card_ext']['signature'] = $string
  457.  
  458. return $resultArray
  459.  
  460.  

4. [代码]微信JSAPI

 

 
  1. <?php 
  2. require_once 'lib.inc.php'
  3. $wx = new WxApi(); 
  4. //通过网页获取openid 
  5. //if(!isset($_GET['code'])){ 
  6. // 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"); 
  7. //} 
  8. //else{ 
  9. // $CODE = $_GET['code']; 
  10. // $Info = $wx->wxOauthAccessToken($CODE); 
  11. //print_r($Info); 
  12. // $openId = $Info['openid'];  
  13. //} 
  14. //////////////////////////////////////////// 
  15.  
  16. $signPackage = $wx->wxJsapiPackage(); 
  17. //print_r($signPackage); 
  18. $kqInfo = $wx->wxCardPackage(""); 
  19. $listInfo = $wx->wxCardListPackage(); 
  20. ?> 
  21. <html> 
  22. <head> 
  23. <title>JSAPI接口测试</title> 
  24. <meta charset="UTF-8"
  25. <meta name="viewport" content="width=device-width, initial-scale=1.0"
  26.  
  27. <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script> 
  28. <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 
  29. </head> 
  30. <body> 
  31. <div> 
  32. <input type="button" id="batchAddCard" name="batchAddCard" value="添加卡券" /><br /> 
  33. <input type="button" id="openCard" name="openCard" value="拉起卡券库" /><br /> 
  34. <input type="button" id="ShareTimeLine" name="ShareTimeLine" value="分享朋友圈" /><br /> 
  35. <div id="showInfo"
  36.  
  37. </div> 
  38. </div> 
  39.  
  40. <script> 
  41. wx.config({ 
  42. debug: false, 
  43. appId: '<?php echo $signPackage["appId"];?>'
  44. timestamp: <?php echo $signPackage["timestamp"];?>, 
  45. nonceStr: '<?php echo $signPackage["nonceStr"];?>'
  46. signature: '<?php echo $signPackage["signature"];?>'
  47. jsApiList: [ 
  48. // 所有要调用的 API 都要加到这个列表中 
  49. 'onMenuShareTimeline'
  50. 'onMenuShareAppMessage'
  51. 'addCard'
  52. 'openCard' 
  53. }); 
  54.  
  55. wx.ready(function () { 
  56. // 在这里调用 API 
  57. wx.onMenuShareAppMessage({ 
  58. title: '互联网之子'
  59. desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。'
  60. link: 'http://movie.douban.com/subject/25785114/'
  61. imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg'
  62. trigger: function (res) { 
  63. // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 
  64. alert('用户点击发送给朋友'); 
  65. }, 
  66. success: function (res) { 
  67. alert('已分享'); 
  68. }, 
  69. cancel: function (res) { 
  70. alert('已取消'); 
  71. }, 
  72. fail: function (res) { 
  73. alert(JSON.stringify(res)); 
  74. }); 
  75.  
  76. document.querySelector('#ShareTimeLine').onclick = function () { 
  77. wx.onMenuShareTimeline({ 
  78. title: '互联网之子'
  79. link: 'http://movie.douban.com/subject/25785114/'
  80. imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg'
  81. trigger: function (res) { 
  82. // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回 
  83. alert('用户点击分享到朋友圈'); 
  84. }, 
  85. success: function (res) { 
  86. alert('已分享'); 
  87. }, 
  88. cancel: function (res) { 
  89. alert('已取消'); 
  90. }, 
  91. fail: function (res) { 
  92. alert(JSON.stringify(res)); 
  93. }); 
  94. };  
  95.  
  96. document.querySelector('#batchAddCard').onclick = function () { 
  97. wx.addCard({ 
  98. cardList: [ 
  99. cardId: 'p7G0Cj_1HGF2nijO4sTlVTzawFhI'
  100. cardExt: '{"timestamp":"<?php echo $kqInfo['cardExt']['timestamp'];?>", "signature":"<?php echo $kqInfo['cardExt']['signature'];?>"}' 
  101. ], 
  102. success: function (res) { 
  103. var cardList = res.cardList; // 添加的卡券列表信息 
  104. alert(cardList); 
  105. }, 
  106. cancel: function (res) { 
  107. alert('已取消'); 
  108. }, 
  109. fail: function (res) { 
  110. alert(JSON.stringify(res)); 
  111. }); 
  112. }; 
  113.  
  114. var shareData = { 
  115. title: '微信JS-SDK Demo'
  116. desc: '微信JS-SDK,帮助第三方为用户提供更优质的移动web服务'
  117. link: 'http://demo.open.weixin.qq.com/jssdk/'
  118. imgUrl: 'http://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRt8Qia4lv7k3M9J1SKqKCImxJCt7j9rHYicKDI45jRPBxdzdyREWnk0ia0N5TMnMfth7SdxtzMvVgXg/0' 
  119. }; 
  120.  
  121. wx.onMenuShareAppMessage(shareData); 
  122.  
  123. wx.onMenuShareTimeline(shareData); 
  124. }); 
  125.  
  126. var readyFunc = function onBridgeReady() { 
  127. // 绑定关注事件 
  128. document.querySelector('#openCard').addEventListener('click'
  129. function(e) { 
  130. WeixinJSBridge.invoke('chooseCard', { 
  131. "app_id""<?php echo $listInfo['app_id']?>"
  132. "location_id "''
  133. "sign_type""SHA1"
  134. "card_sign""<?php echo $listInfo['card_sign']?>"
  135. "card_id""<?php echo $listInfo['card_id']?>"
  136. "card_type""<?php echo $listInfo['card_type']?>"
  137. "time_stamp""<?php echo $listInfo['time_stamp']?>"
  138. "nonce_str""<?php echo $listInfo['nonce_str']?>" 
  139. }, 
  140. function(res) { 
  141. alert(res.err_msg + res.choose_card_info); 
  142. $("#showInfo").emptyempty().append(res.err_msg + res.choose_card_info); 
  143. }); 
  144. }); 
  145.  
  146. if (typeof WeixinJSBridge === "undefined") { 
  147. document.addEventListener('WeixinJSBridgeReady', readyFunc, false); 
  148. else { 
  149. readyFunc(); 
  150.  
  151. </script> 
  152. </body> 
  153. </html> 

5. [代码]创建卡券

 

 
  1. $kqinfo = array("card" => array()); 
  2. $kqinfo['card']['card_type'] = 'GENERAL_COUPON'
  3. $kqinfo['card']['general_coupon'] = array('base_info' => array(), 'default_detail' => array()); 
  4. $kqinfo['card']['general_coupon']['base_info']['logo_url'] = 'URL'
  5. $kqinfo['card']['general_coupon']['base_info']['code_type'] = 'CODE_TYPE_QRCODE'
  6. $kqinfo['card']['general_coupon']['base_info']['brand_name'] = ''
  7. $kqinfo['card']['general_coupon']['base_info']['title'] = '测试卡券'
  8. $kqinfo['card']['general_coupon']['base_info']['color'] = 'Color030'
  9. $kqinfo['card']['general_coupon']['base_info']['notice'] = '测试测试测试'
  10. $kqinfo['card']['general_coupon']['base_info']['description'] = '这是一张优惠券'
  11. $kqinfo['card']['general_coupon']['base_info']['date_info']['type'] = 1; 
  12. $kqinfo['card']['general_coupon']['base_info']['date_info']['begin_timestamp'] = time(); 
  13. $kqinfo['card']['general_coupon']['base_info']['date_info']['end_timestamp'] = time() + 100 * 24 * 3600; 
  14. $kqinfo['card']['general_coupon']['base_info']['sku']['quantity'] = 100000; 
  15. $kqinfo['card']['general_coupon']['default_detail'] = '测试数据/n测试数据/n测试数据'
  16.  
  17. //var_dump($kqinfo); 
  18. //$kqinfo = json_encode($kqinfo); 
  19. $kqinfo = C::enJson($kqinfo); 
  20.  
  21. //print_r( $kqinfo); 
  22. //$resultData = $wx->wxCardCreated($kqinfo); 

以上所述就是本文的全部内容,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表