微信支付多次回调

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

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

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

对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 (通知频率为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下 就解决啦