From 776e63d6e5052d0162d7d9d408a80efde8a2afe3 Mon Sep 17 00:00:00 2001 From: Ji Guang Date: Fri, 3 Jun 2016 11:57:14 +0800 Subject: [PATCH 1/8] add shortvideo type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加小视频类型,其他函数无影响 --- wechat.class.php | 1 + 1 file changed, 1 insertion(+) diff --git a/wechat.class.php b/wechat.class.php index ff16755..a0502af 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -52,6 +52,7 @@ class Wechat const MSGTYPE_NEWS = 'news'; const MSGTYPE_VOICE = 'voice'; const MSGTYPE_VIDEO = 'video'; + const MSGTYPE_SHORTVIDEO = 'shortvideo'; const EVENT_SUBSCRIBE = 'subscribe'; //订阅 const EVENT_UNSUBSCRIBE = 'unsubscribe'; //取消订阅 const EVENT_SCAN = 'SCAN'; //扫描带参数二维码 -- Gitee From 32447fd61ca4b203b6433254846ae01cecfbf82b Mon Sep 17 00:00:00 2001 From: ZhengWeiDong Date: Wed, 3 Aug 2016 00:17:57 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=9C=A8=E6=91=87=E4=B8=80=E6=91=87=E9=A1=B5=E9=9D=A2=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E7=9A=84=E5=9B=BE=E7=89=87=E7=B4=A0=E6=9D=90=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E5=9C=B0=E5=9D=80=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wechat.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wechat.class.php b/wechat.class.php index 8f340cb..d35cd7f 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -3838,7 +3838,7 @@ class Wechat */ public function uploadShakeAroundMedia($data){ if (!$this->access_token && !$this->checkAuth()) return false; - $result = $this->http_post(self::API_URL_PREFIX.self::SHAKEAROUND_MATERIAL_ADD.'access_token='.$this->access_token,$data,true); + $result = $this->http_post(self::API_BASE_URL_PREFIX.self::SHAKEAROUND_MATERIAL_ADD.'access_token='.$this->access_token,$data,true); if ($result) { $json = json_decode($result,true); -- Gitee From 408677cbc105e01c9fb32f534601928f70efcaf0 Mon Sep 17 00:00:00 2001 From: ZhengWeiDong Date: Wed, 3 Aug 2016 00:18:15 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=91=87=E4=B8=80?= =?UTF-8?q?=E6=91=87=E4=B8=8A=E4=BC=A0=E7=B4=A0=E6=9D=90=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/test-upload-shake-around-media.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 test/test-upload-shake-around-media.php diff --git a/test/test-upload-shake-around-media.php b/test/test-upload-shake-around-media.php new file mode 100644 index 0000000..c063ea6 --- /dev/null +++ b/test/test-upload-shake-around-media.php @@ -0,0 +1,13 @@ + '', //填写高级调用功能的app id, 请在微信开发模式后台查询 + 'appsecret' => '', //填写高级调用功能的密钥 + ); + $weObj = new Wechat($options); + $weObj->uploadShakeAroundMedia(array('media'=>'@')); \ No newline at end of file -- Gitee From 84074b74d6b7ca6aecf20b192d16c3362308c8b3 Mon Sep 17 00:00:00 2001 From: hpp Date: Fri, 5 Aug 2016 18:58:48 +0800 Subject: [PATCH 4/8] fix media upload bug --- qywechat.class.php | 3 +++ wechat.class.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/qywechat.class.php b/qywechat.class.php index b9198bf..fba45bb 100644 --- a/qywechat.class.php +++ b/qywechat.class.php @@ -273,6 +273,9 @@ class Wechat curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); + if(PHP_VERSION_ID >= 50500){ + curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, FALSE); + } $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); diff --git a/wechat.class.php b/wechat.class.php index 8f340cb..1c0e0c7 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -1136,6 +1136,9 @@ class Wechat curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); + if(PHP_VERSION_ID >= 50500){ + curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, FALSE); + } $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); -- Gitee From 6a7186a2bee9392c52aae1eb9d0da9debebe63d4 Mon Sep 17 00:00:00 2001 From: XiaoXuanBing Date: Mon, 15 Aug 2016 11:30:32 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E6=AD=A35.6+curl=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E7=9A=84@?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wechat.class.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/wechat.class.php b/wechat.class.php index ff94dcf..b8b3644 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -1129,7 +1129,24 @@ class Wechat curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 } - if (is_string($param) || $post_file) { + if (PHP_VERSION_ID >= 50500 && class_exists('\CURLFile')) { + $is_curlFile = true; + } else { + $is_curlFile = false; + if (defined('CURLOPT_SAFE_UPLOAD')) { + curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, false); + } + } + if (is_string($param)) { + $strPOST = $param; + }elseif($post_file) { + if($is_curlFile) { + foreach ($param as $key => $val) { + if (substr($val, 0, 1) == '@') { + $param[$key] = new \CURLFile(realpath(substr($val,1))); + } + } + } $strPOST = $param; } else { $aPOST = array(); @@ -1142,9 +1159,6 @@ class Wechat curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); - if(PHP_VERSION_ID >= 50500){ - curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, FALSE); - } $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); -- Gitee From 192d2f6fd862799d00495cb4e7ad603f83151e25 Mon Sep 17 00:00:00 2001 From: see365 Date: Fri, 26 Aug 2016 10:42:23 +0800 Subject: [PATCH 6/8] CURLOPT_SAFE_UPLOAD should before CURLOPT_POSTFIELDS --- qywechat.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/qywechat.class.php b/qywechat.class.php index fba45bb..1b63f2c 100644 --- a/qywechat.class.php +++ b/qywechat.class.php @@ -272,10 +272,11 @@ class Wechat curl_setopt($oCurl, CURLOPT_URL, $url); curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt($oCurl, CURLOPT_POST,true); - curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); if(PHP_VERSION_ID >= 50500){ curl_setopt($oCurl, CURLOPT_SAFE_UPLOAD, FALSE); } + curl_setopt($oCurl, CURLOPT_POSTFIELDS,$strPOST); + $sContent = curl_exec($oCurl); $aStatus = curl_getinfo($oCurl); curl_close($oCurl); -- Gitee From 75049c81dc6aa9d2ca257c7b5c6b6f3f95af6c09 Mon Sep 17 00:00:00 2001 From: Gavin Foo Date: Wed, 30 Aug 2017 16:33:34 +0800 Subject: [PATCH 7/8] FIX "Function mcrypt_module_open() is deprecated in PHP 7.1" --- wechat.class.php | 136 +++++++++++++++++++---------------------------- 1 file changed, 55 insertions(+), 81 deletions(-) diff --git a/wechat.class.php b/wechat.class.php index b8b3644..6494e14 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -4645,89 +4645,63 @@ class Prpcrypt $this->key = base64_decode($k . "="); } - /** - * 对明文进行加密 - * @param string $text 需要加密的明文 - * @return string 加密后的密文 - */ - public function encrypt($text, $appid) - { - - try { - //获得16位随机字符串,填充到明文之前 - $random = $this->getRandomStr();//"aaaabbbbccccdddd"; - $text = $random . pack("N", strlen($text)) . $text . $appid; - // 网络字节序 - $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); - $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); - $iv = substr($this->key, 0, 16); - //使用自定义的填充方式对明文进行补位填充 - $pkc_encoder = new PKCS7Encoder; - $text = $pkc_encoder->encode($text); - mcrypt_generic_init($module, $this->key, $iv); - //加密 - $encrypted = mcrypt_generic($module, $text); - mcrypt_generic_deinit($module); - mcrypt_module_close($module); - - // print(base64_encode($encrypted)); - //使用BASE64对加密后的字符串进行编码 - return array(ErrorCode::$OK, base64_encode($encrypted)); - } catch (Exception $e) { - //print $e; - return array(ErrorCode::$EncryptAESError, null); - } + /** + * 对明文进行加密 + * @param string $text 需要加密的明文 + * @return string 加密后的密文 + */ + public function encrypt($text, $appid){ + try { + //获得16位随机字符串,填充到明文之前 + $random = $this->getRandomStr(); + $text = $random . pack("N", strlen($text)) . $text . $appid; + $iv = substr($this->key, 0, 16); + $pkc_encoder = new PKCS7Encoder; + $text = $pkc_encoder->encode($text); + $encrypted = openssl_encrypt($text,'AES-256-CBC',substr($this->key, 0, 32),OPENSSL_ZERO_PADDING,$iv); + return array(ErrorCode::$OK, $encrypted); + } catch (Exception $e) { + //print $e; + return array(ErrorCode::$EncryptAESError, null); } - - /** - * 对密文进行解密 - * @param string $encrypted 需要解密的密文 - * @return string 解密得到的明文 - */ - public function decrypt($encrypted, $appid) - { - - try { - //使用BASE64对需要解密的字符串进行解码 - $ciphertext_dec = base64_decode($encrypted); - $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); - $iv = substr($this->key, 0, 16); - mcrypt_generic_init($module, $this->key, $iv); - //解密 - $decrypted = mdecrypt_generic($module, $ciphertext_dec); - mcrypt_generic_deinit($module); - mcrypt_module_close($module); - } catch (Exception $e) { - return array(ErrorCode::$DecryptAESError, null); - } - - - try { - //去除补位字符 - $pkc_encoder = new PKCS7Encoder; - $result = $pkc_encoder->decode($decrypted); - //去除16位随机字符串,网络字节序和AppId - if (strlen($result) < 16) - return ""; - $content = substr($result, 16, strlen($result)); - $len_list = unpack("N", substr($content, 0, 4)); - $xml_len = $len_list[1]; - $xml_content = substr($content, 4, $xml_len); - $from_appid = substr($content, $xml_len + 4); - if (!$appid) - $appid = $from_appid; - //如果传入的appid是空的,则认为是订阅号,使用数据中提取出来的appid - } catch (Exception $e) { - //print $e; - return array(ErrorCode::$IllegalBuffer, null); - } - if ($from_appid != $appid) - return array(ErrorCode::$ValidateAppidError, null); - //不注释上边两行,避免传入appid是错误的情况 - return array(0, $xml_content, $from_appid); //增加appid,为了解决后面加密回复消息的时候没有appid的订阅号会无法回复 - + } + /** + * 对密文进行解密 + * @param string $encrypted 需要解密的密文 + * @return string 解密得到的明文 + */ + public function decrypt($encrypted, $appid){ + try { + $iv = substr($this->key, 0, 16); + $decrypted = openssl_decrypt($encrypted,'AES-256-CBC',substr($this->key, 0, 32),OPENSSL_ZERO_PADDING,$iv); + } catch (Exception $e) { + return array(ErrorCode::$DecryptAESError, null); } - + try { + //去除补位字符 + $pkc_encoder = new PKCS7Encoder; + $result = $pkc_encoder->decode($decrypted); + //去除16位随机字符串,网络字节序和AppId + if (strlen($result) < 16) + return ""; + $content = substr($result, 16, strlen($result)); + $len_list = unpack("N", substr($content, 0, 4)); + $xml_len = $len_list[1]; + $xml_content = substr($content, 4, $xml_len); + $from_appid = substr($content, $xml_len + 4); + if (!$appid) + $appid = $from_appid; + //如果传入的appid是空的,则认为是订阅号,使用数据中提取出来的appid + } catch (Exception $e) { + //print $e; + return array(ErrorCode::$IllegalBuffer, null); + } + if ($from_appid != $appid) + return array(ErrorCode::$ValidateAppidError, null); + //不注释上边两行,避免传入appid是错误的情况 + return array(0, $xml_content, $from_appid); + //增加appid,为了解决后面加密回复消息的时候没有appid的订阅号会无法回复 + } /** * 随机生成16位字符串 -- Gitee From 16315801820aadda71020a2497bc871eef599b56 Mon Sep 17 00:00:00 2001 From: kennethgao Date: Fri, 22 Jun 2018 11:53:15 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=8F=91=E9=80=81=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=97=B6=EF=BC=8C=E9=80=9A=E8=BF=87remark?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E4=B8=AD=E6=B7=BB=E5=8A=A0\\n=E6=9D=A5?= =?UTF-8?q?=E6=8D=A2=E8=A1=8C=EF=BC=8C=E8=BE=BE=E5=88=B0=E5=8F=98=E7=9B=B8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=B3=E9=94=AE=E8=AF=8D=E7=9A=84=E6=95=88?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wechat.class.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/wechat.class.php b/wechat.class.php index 6494e14..ef00fbc 100755 --- a/wechat.class.php +++ b/wechat.class.php @@ -2715,7 +2715,8 @@ class Wechat */ public function sendTemplateMessage($data){ if (!$this->access_token && !$this->checkAuth()) return false; - $result = $this->http_post(self::API_URL_PREFIX.self::TEMPLATE_SEND_URL.'access_token='.$this->access_token,self::json_encode($data)); + $send_data = str_replace('\\\n', '\n', self::json_encode($data)); + $result = $this->http_post(self::API_URL_PREFIX.self::TEMPLATE_SEND_URL.'access_token='.$this->access_token,$send_data); if($result){ $json = json_decode($result,true); if (!$json || !empty($json['errcode'])) { -- Gitee