Permalink
Browse files

no message

  • Loading branch information...
1 parent b3ed716 commit 96db7a22dbbca7ee97370c1d9dce88e4353ece06 @houdunwang committed Dec 29, 2016
View
@@ -1,8 +1,10 @@
-# 加密解密
+# 微信开发组件
##介绍
-加密组件提供快捷的加密解密操作, 使用设置的密钥实现安全的数据加密处理。
+后盾网微信SDK基于composer 构建,可以快速整合到主流框架中如thinkphp、laravel。为微信开发提供了很大的便利,减少开发人员底层代码的构建,节省开发时间。
+
+如果大家对微信开发不了解,后盾网已经推出了“后盾向军微信开发宝典" 请登录 后盾网论坛获取视频 http://bbs.houdunwang.com
[TOC]
@@ -12,48 +14,6 @@
使用 composer 命令进行安装或下载源代码使用。
```
-composer require houdunwang/crypt
-```
-> HDPHP 框架已经内置此组件,无需要安装
-
-####说明
-调用方式分两种:
-
-实例化对象调用时会产生多个实例
-```
-$obj1 = new \houdunwang\crypt\Crypt();
-$obj1->encrypt('3');
-$obj2 = new \houdunwang\crypt\Crypt();
-$obj3->encrypt('3');
-```
-
-通过类名以静态方法调用时,系统只生成一个对象实例
-```
-\houdunwang\crypt\Crypt::encrypt('a');
-\houdunwang\crypt\Crypt::encrypt('b');
-```
-
-####配置密钥
-不设置密钥时将使用默认密钥
-```
-\houdunwang\crypt\Crypt::key('houdunwang.com');
-```
-
-####加密操作
-```
-$encrypted = \houdunwang\crypt\Crypt::encrypt('后盾人 人人做后盾');
-```
-
-```
-//自定义密钥,解密时使用相同密钥才可解
-$encrypted = \houdunwang\crypt\Crypt::encrypt('后盾网 人人做后盾','houdunwang.com');
-```
-
-####解密操作
-```
-$decrypted = \houdunwang\crypt\Crypt::decrypt($encryptedValue);
-```
+composer require houdunwang/weixin
```
-//自定义密钥,使用加密时相同的密钥才可解
-$decrypted = \houdunwang\crypt\Crypt::decrypt($encryptedValue,'houdunwang.com');
-```
+> HDPHP 框架已经内置此组件,无需要安装
View
@@ -1,6 +1,6 @@
{
- "name": "houdunwang/weixin",
- "description": "微信开发组件",
+ "name": "houdunwang/wexin",
+ "description": "微信开发组件可以快速整合到主流框架中如thinkphp、laravel。为微信开发提供了很大的便利,减少开发人员底层代码的构建,节省开发时间。如果大家对微信开发不了解,后盾网已经推出了【后盾向军微信开发宝典】 请登录 后盾网论坛获取视频 http://bbs.houdunwang.com",
"type": "project",
"keywords": [
"houdunwang",
@@ -28,7 +28,7 @@
"files": [
],
"psr-4": {
- "houdunwang\\weixin\\": "src"
+ "houdunwang\\wexin\\": "src"
}
}
}
View
@@ -1,13 +1,54 @@
<?php
require 'vendor/autoload.php';
-$key = 'sdkdsklldsksdksdksdkldsklsdkllksd';
-//设置密钥
-//$a1 = new \houdunwang\crypt\Crypt();
-//$a2 = new \houdunwang\crypt\Crypt();
-//$a1::encrypt('3');
-//$a2::encrypt('3');
-//exit;
-\houdunwang\crypt\Crypt::key( $key );
-echo $d = \houdunwang\crypt\Crypt::encrypt( '后盾网人人做后盾' );
-echo "<hr/>";
-echo \houdunwang\crypt\Crypt::decrypt( $d );
+$config=[
+ /**
+ * 微信首页验证时使用的token
+ * http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
+ */
+ "token" => "",
+
+ /**
+ * 开发者手动填写或随机生成,将用作消息体加解密密钥。
+ * http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html
+ */
+ "encodingaeskey" => "",
+
+ //公众号身份标识
+ "appid" => "",
+
+ /**
+ * 公众平台API(参考文档API 接口部分)的权限获取所需密钥Key
+ */
+ "appsecret" => "",
+
+ /**
+ * 公众号支付请求中用于加密的密钥Key,微信发来的邮件中的微信支付商户号
+ */
+ "mch_id" => "",
+
+ /**
+ * 商户支付密钥
+ * 此值需要手动在腾讯商户后台API密钥保持一致
+ */
+ "key" => "",
+
+ /**
+ * 接收微信支付异步通知回调地址
+ * 不能携带参数,需要先声明路由
+ */
+ "notify_url" => __ROOT__ . '/index.php/wxnotifyurl',
+
+ /**
+ * 支付成功回调地址
+ */
+ "back_url" => 'http://www.houdunwang.com',
+
+ /**
+ * 微信证书红包等接口使用
+ * https://pay.weixin.qq.com/index.php/core/account/api_cert#
+ */
+ "apiclient_cert" => "cert/apiclient_cert.pem",
+ "apiclient_key" => "cert/apiclient_key.pem",
+ "rootca" => "cert/rootca.pem",
+];
+\houdunwang\config\Config::set('wechat',$config);
View
@@ -1,4 +1,8 @@
<?php namespace houdunwang\weixin;
+
+use houdunwang\config\Config;
+use houdunwang\weixin\build\Base;
+
/** .-------------------------------------------------------------------
* | Software: [HDCMS framework]
* | Site: www.hdcms.com
@@ -7,186 +11,38 @@
* | WeChat: aihoudun
* | Copyright (c) 2012-2019, www.houdunwang.com. All Rights Reserved.
* '-------------------------------------------------------------------*/
-class WeChat extends Error {
- use Xml;
- //配置项
- protected static $config = [ ];
- //access_token
- protected $access_token;
- //微信服务器发来的数据
- protected $message;
- //API 根地址
- protected $apiUrl = 'https://api.weixin.qq.com';
-
- public function __construct( array $config = [ ] ) {
- if ( empty( $config ) && defined( 'HDPHP_PATH' ) && function_exists( 'c' ) ) {
- $config = c( 'wechat' );
- }
- if ( ! empty( $config ) ) {
- self::$config = $config;
- }
- $this->access_token = $this->getAccessToken();
- //处理 微信服务器 发来的数据
- $this->message = $this->parsePostRequestData();
- }
-
- //设置配置项
- public function config( $config ) {
- self::$config = $config;
- }
-
- //获取微信服务器发来的消息(官网消息或用户消息)
- public function getMessage() {
- return $this->message;
- }
-
- //解析微信发来的POST/XML数据
- private function parsePostRequestData() {
- if ( isset( $GLOBALS['HTTP_RAW_POST_DATA'] ) ) {
- $post = $GLOBALS['HTTP_RAW_POST_DATA'];
-
- return simplexml_load_string( $post, 'SimpleXMLElement', LIBXML_NOCDATA );
- }
- }
-
- //微信接口整合验证进行绑定
- public function valid() {
- if ( ! isset( $_GET["echostr"] ) || ! isset( $_GET["signature"] ) || ! isset( $_GET["timestamp"] ) || ! isset( $_GET["nonce"] ) ) {
- return false;
- }
- $echoStr = $_GET["echostr"];
- $signature = $_GET["signature"];
- $timestamp = $_GET["timestamp"];
- $nonce = $_GET["nonce"];
- $token = self::$config['token'];
- $tmpArr = [ $token, $timestamp, $nonce ];
- sort( $tmpArr, SORT_STRING );
- $tmpStr = implode( $tmpArr );
- $tmpStr = sha1( $tmpStr );
+class WeChat {
+ //连接
+ protected $link;
- if ( $tmpStr == $signature ) {
- echo $echoStr;
- exit;
- } else {
- return false;
- }
- }
-
- /**
- * 获取accessToken
- * access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储
- * 至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效,
- * 每天可获取2000次
- * 服务器返回的 access_token 过期时间,一般2小时
- *
- * @param bool $force 强制获取
- *
- * @return bool
- */
- public function getAccessToken( $force = false ) {
- //缓存名
- $cacheName = md5( self::$config['appid'] . self::$config['appsecret'] );
- //缓存文件
- $file = __DIR__ . '/cache/' . $cacheName . '.php';
- if ( $force === false && is_file( $file ) && filemtime( $file ) + 7000 > time() ) {
- //缓存有效
- $data = include $file;
- } else {
- $url = $this->apiUrl . '/cgi-bin/token?grant_type=client_credential&appid=' . self::$config['appid'] . '&secret=' . self::$config['appsecret'];
- $data = $this->curl( $url );
- $data = json_decode( $data, true );
- //获取失败
- if ( isset( $data['errcode'] ) ) {
- return false;
- }
- //缓存access_token
- $dir = dirname( $file );
- is_dir( $dir ) || mkdir( $dir, 0755, true );
- file_put_contents( $file, '<?php return ' . var_export( $data, true ) . ';?>' );
- }
+ //更改缓存驱动
+ protected function driver() {
+ $this->link = new Base();
+ $this->link->config( Config::get( 'wechat' ) );
+ $this->link->bootstrap();
- //获取access_token成功
- return $this->access_token = $data['access_token'];
+ return $this;
}
- /**
- * 发送请求,第二个参数有值时为Post请求
- *
- * @param string $url 请求地址
- * @param array $fields 发送的post表单
- *
- * @return string
- */
- public function curl( $url, $fields = [ ] ) {
- $ch = curl_init();
- //设置我们请求的地址
- curl_setopt( $ch, CURLOPT_URL, $url );
- //数据返回后不要直接显示
- curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
- //禁止证书校验
- curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
- curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
- if ( $fields ) {
- curl_setopt( $ch, CURLOPT_TIMEOUT, 30 );
- curl_setopt( $ch, CURLOPT_POST, 1 );
- curl_setopt( $ch, CURLOPT_POSTFIELDS, $fields );
+ public function __call( $method, $params ) {
+ if ( is_null( $this->link ) ) {
+ $this->driver();
}
- $data = '';
- if ( curl_exec( $ch ) ) {
- //发送成功,获取数据
- $data = curl_multi_getcontent( $ch );
- }
- curl_close( $ch );
-
- return $data;
-
- }
-
- //产生随机字符串,不长于32位
- public function getRandStr( $length = 32 ) {
- $chars = "abcdefghijklmnopqrstuvwxyz0123456789";
- $str = "";
- for ( $i = 0; $i < $length; $i ++ ) {
- $str .= substr( $chars, mt_rand( 0, strlen( $chars ) - 1 ), 1 );
+ if ( method_exists( $this->link, $method ) ) {
+ return call_user_func_array( [ $this->link, $method ], $params );
}
-
- return $str;
- }
-
- //生成签名,支付或红包等使用
- public function makeSign( $data ) {
- //签名步骤一:按字典序排序参数
- ksort( $data );
- $string = $this->ToUrlParams( $data );
- //签名步骤二:在string后加入KEY
- $string = $string . "&key=" . self::$config['key'];
- //签名步骤三:MD5加密
- $string = md5( $string );
- //签名步骤四:所有字符转为大写
- $result = strtoupper( $string );
-
- return $result;
}
- //格式化参数格式化成url参数 为生成签名服务
- protected function ToUrlParams( $data ) {
- $buff = "";
- foreach ( $data as $k => $v ) {
- if ( $k != "sign" && $k != "key" && $v != "" && ! is_array( $v ) ) {
- $buff .= $k . "=" . $v . "&";
- }
+ public static function single() {
+ static $link = null;
+ if ( is_null( $link ) ) {
+ $link = new static();
}
- $buff = trim( $buff, "&" );
-
- return $buff;
+ return $link;
}
- //获取实例
- public function instance( $type ) {
- $class = '\wechat\build\\' . ucfirst( $type );
-
- return new $class( self::$config );
+ public static function __callStatic( $name, $arguments ) {
+ return call_user_func_array( [ static::single(), $name ], $arguments );
}
-
}
@@ -1,8 +1,9 @@
<?php namespace houdunwang\weixin;
-use houdunwang\framework\ServiceFacade;
-class WeChatFacade extends ServiceFacade {
+use houdunwang\framework\build\Facade;
+
+class WeChatFacade extends Facade {
public static function getFacadeAccessor() {
return 'WeChat';
}
@@ -1,8 +1,8 @@
<?php namespace houdunwang\weixin;
-use houdunwang\framework\ServiceProvider;
+use houdunwang\framework\build\Provider;
-class WeChatProvider extends ServiceProvider {
+class WeChatProvider extends Provider {
//延迟加载
public $defer = true;
Oops, something went wrong.

0 comments on commit 96db7a2

Please sign in to comment.