当遇到config:invalid url domain 有2种可能
1.没有配置url。
2.url配置错误。记住不要带http://或https://直接域名就可以了,如:www.netpc.com.cn
当遇到config:invalid url domain 有2种可能
1.没有配置url。
2.url配置错误。记住不要带http://或https://直接域名就可以了,如:www.netpc.com.cn
JS-SDK使用权限签名算法
在获取jsapi_ticket的时候出现签名错误config:invalid signature
签名算法
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。 示例:
noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://mp.weixin.qq.com?params=value
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
注意事项
1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2.签名用的url必须是调用JS接口页面的完整URL。
3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。
如出现invalid signature 等错误详见附录5常见错误及解决办法。
最后发现是jsapi_ticket参数没有传送进函数。
今天需要shtml,测试了下,很简单在nginx.conf 文件的 http{} 段中,以开启 SSI 模块的支持:
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;
重启nginx即可
带点shtml语法
之所以要扯到 SSI,是因爲 Shtml – Server-Parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。
目前,主要有以下几种用用途:
#echo 示范
作用:将环境变量插入到页面中。
语法:
<!–#echo var=”变量名称”–>
示例:
<!–#echo var=”DOCUMENT_NAME”–> 本文档名称
<!–#echo var=”DATE_LOCAL”–> 现在时间
<!–#echo var=”REMOTE_ADDR”–> 你的IP地址
#include 示范
作用:将文本文件的内容直接插入到文档页面中。
语法:
<!–#include file=”文件名称”–>
<!–#include virtual=”文件名称”–>
file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档,则为file=”nav_head.htm”。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为file=”/hoyi/nav_head.htm”
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置
注意:
示例:
<!–#include file=”nav_head.htm”–> 将头文件插入到当前页面
<!–#include file=”nav_foot.htm”–> 将尾文件插入到当前页面
本来想测试下,结果无论本地或生产环境都是nts,所以这里只说安装,不说使用,因为没用上。
windows版本的下载地址
http://windows.php.net/downloads/pecl/releases/pthreads/
找个最新版本下载解压:
把pthreadVC2.dll和php_pthreads.dll文件,把vc2文件放到php.exe同级目录,把php_pthreads.dll放到扩展目录下。
1、修改php.ini文件 添加extension=php_pthreads.dll
2、Apache还需要修改配置文件httpd.conf 添加LoadFile “X:/php5/pthreadVC2.dll”
3、重启php服务
linux版本的下载地址
http://pecl.php.net/package/pthreads
找个最新版本下载解压:
1.解压tar -zxvf pthreads-3.1.6.tgz ;
2.进入源码文件夹 cd pthreads-3.1.6 执行 /usr/local/php/bin/phpize;
3.执行./configure –with-php-config=/usr/local/php/bin/php-config;
4.执行make && make install;
5.编辑/usr/local/php/lib/php.ini加上extension=pthreads.so
6.重启php服务
使用截取sql为:
UPDATE table1,table2 SET table1.description=left(trim(strip_tags(table2.content),180)) where table1.id= table2.id
用到以下函数和自定义strip_tags函数
1、从左开始截取字符串
left(str, length)
说明:left(被截取字段,截取长度)
例:select left(content,200) as abstract from my_content_t
2、从右开始截取字符串
right(str, length)
说明:right(被截取字段,截取长度)
例:select right(content,200) as abstract from my_content_t
3、截取字符串
substring(str, pos)
substring(str, pos, length)
4、trim//左右去空格
5、除去换行符
UPDATE table1 SET description=REPLACE(description,CHAR(13),”);
UPDATE table1 SET description=REPLACE(description,CHAR(10),”);
6、自定义函数用个新版的phpmyadmin添加就可以了,免去用命令行的麻烦。
选择某个数据库然后,点上面的程序-> 添加程序,函数名strip_tags,变量$str,类型和返回值都是text,定义就复制下面红色部分。
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
DECLARE $start,$end INT DEFAULT 1;
LOOP
SET $start = LOCATE(“<“, $str, $start);
IF (!$start) THEN RETURN $str; END IF;
SET $end = LOCATE(“>”, $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end – $start + 1, “”);
END LOOP;
END;
安装swoole前必须保证系统已经安装了下列软件
php-5.3.10 或更高版本
gcc-4.4 或更高版本
make
autoconf
下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装
这里我选择php官方网站下载安装包,找stable稳定版。
wget http://pecl.php.net/get/swoole-1.9.10.tgz
tar zxvf swoole-1.9.10.tgz
cd swoole-1.9.10
phpize
./configure
make
sudo make install
swoole项目已收录到PHP官方扩展库,除了手工下载编译外,还可以通过PHP官方提供的pecl命令,一键下载安装swoole
pecl install swoole
编译安装成功后,修改php.ini加入
extension=swoole.so
通过php -m
或phpinfo()
来查看是否成功加载了swoole,如果没有可能是php.ini
的路径不对,可以使用php -i |grep php.ini
来定位到php.ini
的绝对路径。
重启php,执行php -m命令看下是不是有该扩展了。
今天使用ems邮政收google西联汇款的广告费提示境外错误:U0300 – RECORD NOT LOCKED TO YOUR TERMINAL
注意最后两栏国际收支申报信息:
第一栏国际收支交易编码选:321000_职工报酬(工资、薪金和福利)
第二栏国际收支交易附言选:居民从非居民雇主获得的工资收入
呵呵,一定是工资哦,不然系统会报错!唉!
重新尝试的时候提示境外错误:U2313 – MTCN ON HOLD – PLS RETRY AFTER FEW MINUTES “(境外错误:U2313 – 汇款监控号码保留 – 请等几分钟后重试)
出现这个错误是因为第一次没有支取成功,过几分钟再试就可以了。
查看附图
交易成功提示如图:
v9外部可以通过模型的add_content函数来添加文章
phpcms\model\content_model.class.php
/**
* 添加内容
*
* @param $datas
* @param $isimport 是否为外部接口导入
*/
public function add_content($data,$isimport = 0) {
}
该函数调用了一下类
caches\caches_model\caches_data\content_input.class.php
此类由以下类文件组合生成,修改以下文件红色部分即可
phpcms\modules\content\fields\content_input.class.php
function __construct($modelid) {
$this->db = pc_base::load_model(‘sitemodel_field_model’);
$this->db_pre = $this->db->db_tablepre;
$this->modelid = $modelid;
$this->fields = getcache(‘model_field_’.$modelid,’model’);
//初始化附件类
pc_base::load_sys_class(‘attachment’,”,0);
$this->siteid = param::get_cookie(‘siteid’)?param::get_cookie(‘siteid’):1;//初始化的时候由于接口方式是没有登陆,所有就没有cookie了,没有站点id就无法获取是否加水印的配置信息了,给它个默认值1即可。
$this->attachment = new attachment(‘content’,’0′,$this->siteid);
$this->site_config = getcache(‘sitelist’,’commons’);
$this->site_config = $this->site_config[$this->siteid];
}
短信服务这个产品已经整合到消息服务MNS中了,您需要使用MNS的sdk来发送短信。
PHP SDK: https://help.aliyun.com/document_detail/51929.html。 另外,如需查询消费记录,您可以登录控制台费用中心查看下具体的使用明细。 费用中心 – 消费记录 – 消费明细,通过下拉菜单选择“消息服务”产品,筛选时间进行查询。 在列表中点击“详情”进行查看,在详情页点击箭头可以查看到具体的使用量以及对应产生的费用。
建议下载最新发布的SDK版本以获得最佳性能和稳定性。
<?php //echo dirname(dirname(dirname(__FILE__)));exit; require_once(dirname(__FILE__).'/mns-autoloader.php'); use AliyunMNS\Client; use AliyunMNS\Topic; use AliyunMNS\Constants; use AliyunMNS\Model\MailAttributes; use AliyunMNS\Model\SmsAttributes; use AliyunMNS\Model\BatchSmsAttributes; use AliyunMNS\Model\MessageAttributes; use AliyunMNS\Exception\MnsException; use AliyunMNS\Requests\PublishMessageRequest; class PublishBatchSMSMessageDemo { public function run() { /** * Step 1. init client */ $this->endPoint = "xxx"; // 记得对应的机房 eg. http://1234567890123456.mns.cn-hangzhou.aliyuncs.com $this->accessId = "xxx"; $this->accessKey = "xxx"; $this->client = new Client($this->endPoint, $this->accessId, $this->accessKey); /** * Step 2. get topic reference */ $topicName = "sms.topic-cn-hangzhou";//如自己没有创建 就用默认的 面板上可以查到 $topic = $this->client->getTopicRef($topicName); /** * Step 3. generate SMS message attributes */ // 3.1 set SMS message sign name and template code $batchSmsAttributes = new BatchSmsAttributes("已经创建好短信签名", "短信模板ID"); // 3.2 [if has param defined in SMS message template] set SMS message receiver param $batchSmsAttributes->addReceiver("要发送的手机号码13988888888", array("code" => "123","product" => "五一","item" => "团购"));//模板里面的标签解析 //$batchSmsAttributes->addReceiver("YourReceiverPhoneNumber2", array("YourSMSTemplateParamKey1" => "value1")); $messageAttributes = new MessageAttributes(array($batchSmsAttributes)); /** * Step 4. set SMS message body ( required ) */ $messageBody = "smsmessage"; /** * Step 5. publish SMS message */ $request = new PublishMessageRequest($messageBody, $messageAttributes); try { $res = $topic->publishMessage($request); echo $res->isSucceed(); echo "\n"; echo $res->getMessageId(); echo "\n"; } catch (MnsException $e) { echo $e; echo "\n"; } } } $instance = new PublishBatchSMSMessageDemo(); $instance->run(); ?>
根据错误码解决问题:https://help.aliyun.com/document_detail/27501.html