首页 > 开发 > PHP > 正文

php微信公众平台开发类实例

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

这篇文章主要介绍了php微信公众平台开发类,实例分析了针对微信消息的响应、回复、编码等相关技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了php微信公众平台开发类。分享给大家供大家参考。具体分析如下:

ThinkWechat.php类文件如下:

 

 
  1. <?php 
  2. class Wechat { 
  3. /** 
  4. * 微信推送过来的数据或响应数据 
  5. * @var array 
  6. */ 
  7. private $data = array(); 
  8. /** 
  9. * 构造方法,用于实例化微信SDK 
  10. * @param string $token 微信开放平台设置的TOKEN 
  11. */ 
  12. public function __construct($token) { 
  13. $this->auth($token) || exit
  14. if(!emptyempty($_GET['echostr'])){ 
  15. exit($_GET['echostr']); 
  16. else { 
  17. try 
  18. $xml = file_get_contents("php://input"); 
  19. $xml = new SimpleXMLElement($xml); 
  20. $xml || exit
  21. foreach ($xml as $key => $value) { 
  22. $this->data[$key] = strval($value); 
  23. }catch(Exception $e){ 
  24. /** 
  25. * 获取微信推送的数据 
  26. * @return array 转换为数组后的数据 
  27. */ 
  28. public function request(){ 
  29. return $this->data; 
  30. /** 
  31. * * 响应微信发送的信息(自动回复) 
  32. * @param string $to 接收用户名 
  33. * @param string $from 发送者用户名 
  34. * @param array $content 回复信息,文本信息为string类型 
  35. * @param string $type 消息类型 
  36. * @param string $flag 是否新标刚接受到的信息 
  37. * @return string XML字符串 
  38. */ 
  39. public function response($content$type = 'text'$flag = 0){ 
  40. /* 基础数据 */ 
  41. $this->data = array
  42. 'ToUserName' => $this->data['FromUserName'], 
  43. 'FromUserName' => $this->data['ToUserName'], 
  44. 'CreateTime' => time(), 
  45. 'MsgType' => $type
  46. ); 
  47. /* 添加类型数据 */ 
  48. $this->$type($content); 
  49. /* 添加状态 */ 
  50. $this->data['FuncFlag'] = $flag
  51. /* 转换数据为XML */ 
  52. $xml = new SimpleXMLElement('<xml></xml>'); 
  53. $this->data2xml($xml$this->data); 
  54. exit($xml->asXML()); 
  55. /** 
  56. * 回复文本信息 
  57. * @param string $content 要回复的信息 
  58. */ 
  59. private function text($content){ 
  60. $this->data['Content'] = $content
  61. /** 
  62. * 回复音乐信息 
  63. * @param string $content 要回复的音乐 
  64. */ 
  65. private function music($music){ 
  66. list( 
  67. $music['Title'],  
  68. $music['Description'],  
  69. $music['MusicUrl'],  
  70. $music['HQMusicUrl'
  71. ) = $music
  72. $this->data['Music'] = $music
  73. /** 
  74. * 回复图文信息 
  75. * @param string $news 要回复的图文内容 
  76. */ 
  77. private function news($news){ 
  78. $articles = array(); 
  79. foreach ($news as $key => $value) { 
  80. list( 
  81. $articles[$key]['Title'], 
  82. $articles[$key]['Description'], 
  83. $articles[$key]['PicUrl'], 
  84. $articles[$key]['Url'
  85. ) = $value
  86. if($key >= 9) { break; } //最多只允许10调新闻 
  87. $this->data['ArticleCount'] = count($articles); 
  88. $this->data['Articles'] = $articles
  89. /** 
  90. * 数据XML编码 
  91. * @param object $xml XML对象 
  92. * @param mixed $data 数据 
  93. * @param string $item 数字索引时的节点名称 
  94. * @return string 
  95. */ 
  96. private function data2xml($xml$data$item = 'item') { 
  97. foreach ($data as $key => $value) { 
  98. /* 指定默认的数字key */ 
  99. is_numeric($key) && $key = $item
  100. /* 添加子元素 */ 
  101. if(is_array($value) || is_object($value)){ 
  102. $child = $xml->addChild($key); 
  103. $this->data2xml($child$value$item); 
  104. else { 
  105. if(is_numeric($value)){ 
  106. $child = $xml->addChild($key$value); 
  107. else { 
  108. $child = $xml->addChild($key); 
  109. $node = dom_import_simplexml($child); 
  110. $node->appendChild($node->ownerDocument->createCDATASection($value)); 
  111. /** 
  112. * 对数据进行签名认证,确保是微信发送的数据 
  113. * @param string $token 微信开放平台设置的TOKEN 
  114. * @return boolean true-签名正确,false-签名错误 
  115. */ 
  116. private function auth($token){ 
  117. if(emptyempty($_GET['signature'])) return
  118. /* 获取数据 */ 
  119. $data = array($_GET['timestamp'], $_GET['nonce'], $token); 
  120. $sign = $_GET['signature']; 
  121. /* 对数据进行字典排序 */ 
  122. sort($data,SORT_STRING); 
  123. /* 生成签名 */ 
  124. $signature = sha1(implode($data)); 
  125. return $signature === $sign

希望本文所述对大家的php程序设计有所帮助。

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