vscode 使用日记

推荐插件

In a single folder workspace, the command creates an extensions.json file located in the workspace .vscode folder where you can add a list of extensions identifiers ({publisherName}.{extensionName}).

在工作区.vscode下建立extensions.json文件,组员可以通过@recommended 安装推荐插件 内容如下

{ "recommendations": [ "ms-vscode.vscode-typescript-tslint-plugin", "dbaeumer.vscode-eslint", "msjsdiag.debugger-for-chrome" ] }

设置插件安装位置

code –extensions-dir D:\software\vscode\extensions

单独工作区设置单独插件

不同语言环境下拥有单独的插件,过多插件会导致加载太慢,我们可以建立对于语言的工作区,在独立的工作区内,禁用不用的插件,比如建立一个php工作区,PHP相关的插件启用,其他语言插件禁用。

php自定义函数集合

查找函数定义处

function func_dump($funcname)
{
    try {
        if (is_array($funcname)) {
            $func = new ReflectionMethod($funcname[0], $funcname[1]);
            $funcname = $funcname[1];
        } else {
            $func = new ReflectionFunction($funcname);
        }
    } catch (ReflectionException $e) {
        echo $e->getMessage();
        return;
    }
    $start = $func->getStartLine();
    $end =  $func->getEndLine();
    $filename = $func->getFileName();
    echo "函数{$funcname}被定义在【{$filename}】文件中第{$start}行到{$end}行\n";
}

二维数组排序函数


function sort_array(&$array, $keyid, $order = 'asc', $type = 'number')
{
    if (is_array($array)) {
        foreach ($array as $val) {
            $order_arr[] = $val[$keyid];
        }
        $order = ($order == 'asc') ? SORT_ASC : SORT_DESC;
        $type = ($type == 'number') ? SORT_NUMERIC : SORT_STRING;
        array_multisort($order_arr, $order, $type, $array);
    }
}

vue history 微信分享

1、传递当前url 获取接口参数封装到wx.config里面 url = window.location.href 

2、将分享地址传递分享回调中 

3.后台配置默认访问index.html页面 

 location / {

        try_files $uri $uri/ /index.html;

    }

备注:微信分享 分享到QQ、QQ空间 时 desc不能为空 不然分享不成功

 wx.onMenuShareQQ({

          title:nickname+"个人主页",

          link:shareUrl,

          desc:nickname+"个人主页",

        });

php ssl 发送邮件:fsockopen SSL routines:ssl3_get_server_certificate:certificate verify failed

php5.6版本以上发送的时候,报错:

image.png

官方说明:

It appears that in PHP 5.6.0 (at least the version in Debian jessie, with openssl 1.0.1h-3), this function *is* now validating SSL certificates (in a variety of ways). First, it appears to fail for untrusted certificates (i.e. no matching CA trusted locally), and secondly, it appears to fail for mismatched hostnames in the request and certificate.


解决方法:

1.设置openssl.cafile设置需要指向用于在远程主机上签名SSL证书的CA证书(此方法未验证)

2.禁用验证,fsockopen不支持流上下文,所以请改用stream_socket_client。它返回一个可用于fsockopen资源所有命令的资源。代码:

    $contextOptions = array(
    'ssl' => array(
        'verify_peer' => false, 
        'verify_peer_name' => false,
    )
);

$context = stream_context_create($contextOptions);


$this->smtp_conn = stream_socket_client("ssl://{$host}:{$port}", $errno, $errstr, 20, STREAM_CLIENT_CONNECT, $context);

3. 用swiftmailer的添加streamoptions参数进行设置

      'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => env('MAIL_HOST'),
                'username' => env('MAIL_USERNAME'),
                'password' => env('MAIL_PASSWORD'),
                'port' => env('MAIL_PORT'),
                'encryption' => env('MAIL_ENCRYPTION'),
                'streamoptions' => array(
                    'ssl' => array(
                        'verify_peer'      => false, 
                        'verify_peer_name' => false,
                    ),
                ),
            ],

vuejs架构有感

— user 

— cms

— html

    –user 

   –cms 

user和cms是用vue构建的两个模块,两个模块统一build到html目录下,域名配置到html下假设域名为:example.com

user build到html下需要修改config/index里的相关配置

image.png

如图所示,修改index,assetsRoot,assetsPublicPath三个参数。

但改为并build之后打开页面http://example.com/user/#/index 会自动跳转到http://example.com/user/#/

百思不得其解,最后发现发现改变vue-route2的base参数即可(vue 打包部署到服务器子目录解决方案):

image.png

thinkphphelp(tp助手)升级版使用说明

yii框架中有gii,感觉很方便。所以就想tp也有脚手架这个东西,刚好网上有个朋友已经开发。刚好我在他的基础上做了些调整。首先感谢这个朋友开发出这个东西出来。

我定制这个主要适用于onethink,但并不是完美的,后续会继续升级和更新的。

image.png

  1. 添加了继承控制器,如图所示。

  2. 定制了onethink_backend后台主题模板。模板在Template\View下

  3. 添加了判断如果字段类型是date 显示时间控件 如图:

image.png

4.修复了thinkphphelper 存在的一些问题

项目地址如:https://github.com/fanlt/TPH

微信支付多次回调

今日在做微信支付回调的时候,把微信支付回调结果记录到日志中去,发现日志重复记录同一条回调信息,微信回调推送了多次。

重新翻看微信支付官方文档发现:

支付完成后,微信会把相关支付结果和用户信息发送给商户,商户需要接收处理,并返回应答。

对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)

所以在回调地址接受微信支付信息并处理完相关逻辑 返回成功信息给微信。返回示例如:

<xml>
  <return_code><![CDATA[SUCCESS]]></return_code>
  <return_msg><![CDATA[OK]]></return_msg>
</xml>

阿里云短信服务接入

最近在做发送短信的接口,用了阿里云的短信服务。分享自己的开发心得。

阿里主要提供了三个接口:短信发送API,短信查询API,短信消息API。

短信发送API:发送短信的接口(SendSms)。

短信查询API:短信记录查询接口(QuerySendDetails)。

短信消息API:SmsReport短信状态报告和SmsUp上行短信消息接口

步骤1.首先购买阿里云短信服务。

步骤2.去短信服务控制台去添加短信签名和短信模板

步骤3.下载官方sdk地址 

步骤4.开始你的代码,我是用php开发,这里用php做示例

下载的sdk目录如图所示:

image.png

api_demo:短信发送API、短信查询API demo 

api_sdk:短信发送API、短信查询API 所需要的sdk 

msg_demo: 短信消息API demo 

msg_sdk: 短信消息API 所需要sdk。

SmsDemo.php和MsgDemo.php 是官方给的例子

发送短信:

$demo = new SmsDemo(
    "your AccessKeyId",
    "your AccessKeySecret"
);

echo "SmsDemo::sendSms\n";
$response = $demo->sendSms(
    "短信签名名称", // 短信签名
    "短信模板CODE", // 短信模板编号
    "12345678901", // 短信接收者
    Array(  // 短信模板中字段的值
        "code"=>"12345",
    ),
    uniqid()
);
print_r($response);

查询短信记录:

$demo = new SmsDemo(
    "your AccessKeyId",
    "your AccessKeySecret"
);

$phoneNumbers = "12345678901";
$sendDate="20171024";
$response = $demo->queryDetails($phoneNumbers,$sendDate);
echo '<pre>';
print_r($response);

SmsReport短信消息报告

     $sms = new MsgDemo(
            "1943695596114318",
              "your AccessKeyId",
            "your AccessKeySecret"
        );

        $sms->receiveMsg(
            "SmsReport",
            "Alicom-Queue-10391693-SmsReport",
             function ($message) {
                $message = json_encode($message,JSON_UNESCAPED_UNICODE);
               file_put_contents(\Yii::getAlias('@root').'/logs/msg.log',$message.PHP_EOL,FILE_APPEND);
                return true;
            }
        );

SmsUp上行短信

  $sms = new MsgDemo(
            "1943695596114318",
              "your AccessKeyId",
            "your AccessKeySecret"
        );

        $sms->receiveMsg(
            "SmsUp",
            "Alicom-Queue-10391693-SmsUp",
           function ($message) {
            $message = json_encode($message,JSON_UNESCAPED_UNICODE);
              file_put_contents(\Yii::getAlias('@root').'/logs/msg.log',$message.PHP_EOL,FILE_APPEND);
                return true;
            }
        );

注:

Alicom-Queue-10391693-SmsReport 和 Alicom-Queue-10391693-SmsUp 是你订阅了短信状态报告接收短信上行消息接收后阿里云给予的列队名称 如下图所示

image.png

svn –Previous operation has not finished; run ‘cleanup’ if it was interrupted问题解决

今天svn上传代码如图情况:

image.png

出现这种情况一般都是因为操作了正在编辑的未关闭的文件导致的,编辑操作还在工作列队中,

本地.svn\wc.db数据库文件里面存储了svn的operation,表名是WORK_QUEUE。

下图是wc.db表结构:


image.png


wc.db是sqlite数据库 我们可以第三方数据库工具打开 也可以sqlite3命令查看

sqlite3 请访问 SQLite 下载页面,从 Windows 区下载sqlite-tools-win32-*.zip。下载完成后将sqlite3目录放在window PATH里。


将WORK_QUEUE和WC_LOCK表中的数据清空 再Clean up下 就解决啦