三重奏:收单、结算与拒付在支付系统中的协奏曲

下图就是在《支付交易的三重奏:收单、结算与拒付在支付系统中的协奏曲》中提到的交易单的状态机。

在这里插入图片描述


## 干货物
中通快递的正则校验。目前中通正则为:

((118|828|618|680|518|528|688|689|010|880|660|805|888|988|628|205|717|718|719|728|738|76[0-9]|701|757|751|768|778|779|358)[0-9]{9})$|^((5711|2008|2009|2010|1180)[0-9]{8})$|((66|88)[0-9]{8})KaTeX parse error: Undefined control sequence: \d at position 34: …|5[3-6]|[7|8]8)\̲d̲{10}|(78|63|12|64)\d{10}$|^(11|13|54|55|56|50|51|72)\d{10}$|9\d{11} ∣ 2 [ 1 − 9 ] 1 [ 0 − 9 ] 10 |^2[1-9]{1}[0-9]{10} 2[19]1[09]10|2710[0-9]{11}$|^731[0-9]{11}$|751[0-7]{1}[0-9]{10} ∣ 7 53 [ 0 − 9 ] 11 |^753[0-9]{11} 753[09]11|^771[0-9]{11} ∣ 7 3 [ 0 − 9 ] 12 |^73[0-9]{12} 73[09]12


### java8

-------------- before -----------------

map = new HashMap<>();
for (Strategy strategy : strategies) {
map.put(strategy.getType(), strategy);
}

-------------- after Java8 -----------------

map = strategies.stream().collect(Collectors.toMap(Strategy::getType, strategy -> strategy));

java8的收集器。


## 批量改文件

//引入模块
var fs = require(“fs”);
var request = require(‘request’);
//下面是百度翻译API的函数文件和参数
var fn = require(‘./js-sdk/md5.js’);//百度的MD5编码文件
var appid = ‘’;//你申请的百度APIID
var key = ‘’;//你的秘钥
var salt = (new Date).getTime();//随机数
var rename = function(src) {
// 读取目录中的所有文件/目录
fs.readdir(src, function(err, paths) {
if (err) {
throw err;
}
paths.forEach(function(path) {
//拼合路径
var _src = src + ‘/’ + path;
//判断文件状态
fs.stat(_src, function(err, st) {
if (err) {
throw err;
}
// 判断是否为文件
if (st.isFile()) {
var query = path.split(‘.’)[0];
// 多个query可以用\n连接 如 query=‘apple\norange\nbanana\npear’
var from = ‘zh’;//转译之前的语种
var to = ‘en’;//转译之后的语种
var str1 = appid + query + salt + key;
//这里的fn是我将MD5.js文件中的MD5函数暴露并引入的
var sign = fn.fn(str1);
var url = ‘http://api.fanyi.baidu.com/api/trans/vip/translate?q=’ + query + ‘&from=’ + from + ‘&to=’ + to + ‘&appid=’ + appid + ‘&salt=’ + salt + ‘&sign=’ + sign;

				request(encodeURI(url), function(error, response, body) {
					if (!error && response.statusCode == 200) {
					    //将返回的数据拼合成为路径
						var newPath = src + '/' + ((JSON.parse(body).trans_result[0].dst).replace(/\s+/g, "")).toLowerCase() + '.png';
						//重命名
						fs.rename(_src, newPath, function(err) {
							if (err) throw err;

						});
					}
				})
			}
			// 如果是目录则递归调用自身
			else if (st.isDirectory()) {
				exists(_src, rename);
			}
		});
	});
});
var exists = function(src, callback) {
    callback(src);
};
exists('./test', rename);

};


for fn in ls /Users/sunhuaili1/test
do
mv ${fn} ${fn}.xlsx
done

//1-引包 nodejs中文件操作主要依靠fs模块
const fs = require(‘fs’)

//2-实现
// 1. 定义两个工具函数
// 获取指定目录路径下的所有文件名
const getFileNames = path => {
// 使用readdir获取指定目录下的所有文件名
return fs.readdirSync(path);;
}

// 根据指定字符截取文件名,返回截取后的字段
const getFileSuffix = (fileName, splitChar) => {
// 取字符第一次出现的位置
const first = fileName.indexOf(splitChar);
// 取字符最后一次出现的位置(根据需要选择)
// const first = fileName.lastIndexOf(splitChar);

const namelength = fileName.length; //取到文件名长度
return fileName.substring(first + 1, namelength); //截取获得后缀名

}

// 2. 定义目录
const dirName = D:\\3. 生活\\3.2 文件下载\\硕鼠下载\\我的解析任务1912152356;

// 3. 读取与改写
let files = getFileNames(dirName);
files.forEach((item, i) => {
// 这里对旧名操作获取新名
let newName = getFileSuffix(item, “-”)
// 使用rename方法进行重命名
fs.rename(${dirName}\\${item}, ${dirName}\\${newName}, (err) => {
if (err) throw err;
console.log(‘重命名完成’);
});
})

修改名字

const fs = require(‘fs’);
const path = require(‘path’);
const url = path.join(__dirname,‘/web/’);
fs.readdir(url, ‘utf8’, (err, fileList) => {
if (err) throw err;
fileList.forEach((item,index)=>{
let length = item.split(‘.’).length;
//获取文件后缀名
let type = ‘.’+ item.split(‘.’)[length-1];
let oldName = item;
//新名称,根据需求修改名称,可以使用正则等等
let newName = index + ‘-’ + type;
fs.rename(url+oldName,url+newName,(err)=>{
throw err;
});
})

 1 const fs = require('fs');
  2 const path = require('path');
  3 const url = path.join(__dirname,'/data/');
  4 fs.readdir(url, 'utf8', (err, fileList) => {
  5     if (err) throw err;
  6     fileList.forEach((item,index)=>{
  7          let oldName = item;
  8          let newName = item + '.xls';
  9         fs.rename(url+oldName,url+newName,(err)=>{}
 10         );
 11     })  
 12 }   
 13 );

const fs = require(‘fs’);
2 const path = require(‘path’);
3 const url = path.join(__dirname,‘/data/’);
4 fs.readdir(url, ‘utf8’, (err, fileList) => {
5 if (err) throw err;
6 fileList.forEach((item,index)=>{
7 let oldName = item;
8 let newName = item + ‘.xls’;
9 fs.renameSync(url+oldName,url+newName);
10 })
11 console.log(“done!”);
12 }
13 );
14

## StripXSS
服务器端过滤XSS(Java)

分类: 存储式(盗用其他用户隐私)、反射(构造url盗取数据)、DOM的xss()

区别CSRF
Xss为客户端信任服务端,允许服务端的任何信息进行允许
CSRF则为服务端信任客户端,没有对用户信息进行校验
Xss主要集中于html标签以及js脚本,对客户端进行破坏
CSRF主要侧重于跨站,伪造获取服务端信息

出现原因
html特性决定,可以执行脚本地方太多了,比如onclick时间,html标签属性

解决原则
一个中心
 不要相信任何用户的输入或者间接输入
两个操作
 对输入内容进行转码
 对输入内容进行过滤

实现方法
1、replacerx


## 查看文件计算时间戳

```bash
for fn in `ls /Users/yangbin5/7.大促/7-icorder/original`
do
 str=${fn:4:10}
 datestr=$(date -r `expr ${str}` +"%Y-%m-%d %H:%M:%S")
 echo " $fn --> $datestr"
done
冰洗2-1591847110020.xlsx --> 2020-06-11 11:45:10
冰洗2-1591847173777.xlsx --> 2020-06-11 11:46:13
冰洗2-1591847302348.xlsx --> 2020-06-11 11:48:22

select id,pin, state,yn,createDate
from dingdan_#t 
where createDate>'2020-03-16 09:00:00' and createDate<'2020-03-20 18:00:00' and substring(sendpay,239,1) = 2 
limit 100

截取小总结
excle用MID
SQL用substring
bash用${fn:开始:多少个}

环境配置

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home
export M2_HOME=/Applications/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3
export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

utf8转gbk

iconv -f UTF-8 -t GBK utf8.html > gbk.html
from to

window.speechSynthesis.cancel()
window.speechSynthesis.speak=function(){}
window.speechSynthesis.pause()

gson太粗暴
gson 1.7.1里面序列化居然用的美国时间序列化,太简单粗暴了~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值