微擎企业付款到用户 PHP
public function sendMoney($openid, $money, $re_user_name = '', $desc = '', $trade_no = '')
{
global $_W;
$paysetting = uni_setting($_W['uniacid'], array('payment'));
$wechatpay = $paysetting['payment']['wechat'];
$account_info = $_W['account'];
$mchid = $wechatpay['mchid'];
$key = $wechatpay['apikey'];
$appid = $account_info['key'];
$desc = isset($desc) ? $desc : '余额提现';
$money = $money * 100;
$pars = array();
$pars['mch_appid'] = $appid;
$pars['mchid'] = $mchid;
$pars['nonce_str'] = random(32);
$pars['partner_trade_no'] = empty($trade_no) ? $mchid . date('Ymd') . rand(1000000000, 9999999999) : $trade_no;
$pars['openid'] = $openid;
if (empty($re_user_name)) {
$pars['check_name'] = 'NO_CHECK';
} else {
$pars['check_name'] = 'FORCE_CHECK';
$pars['re_user_name'] = $re_user_name;
}
// NO_CHECK:不校验真实姓名
// FORCE_CHECK:强校验真实姓名(未实名认证的用户会校验失败,无法转账)
// OPTION_CHECK:针对已实名认证的用户才校验真实姓名(未实名认证用户不校验,可以转账成功)
$pars['amount'] = $money;
$pars['desc'] = $desc;
// $pars['spbill_create_ip'] = isset($wechat['ip']) ? $wechat['ip'] : $_SERVER['SERVER_ADDR'];
$pars['spbill_create_ip'] = gethostbyname($_SERVER["SERVER_NAME"]);
// $pars['spbill_create_ip'] = $_SERVER['SERVER_ADDR'];
ksort($pars, SORT_STRING);
$string1 = '';
foreach ($pars as $k => $v) {
$string1 .= "{$k}={$v}&";
}
$string1 .= "key={$key}";
$pars['sign'] = strtoupper(md5($string1));
$xml = array2xml($pars);
$extras = array();
$path_cert = IA_ROOT . '/addons/weisrc_dish/cert/apiclient_cert_' . $_W['uniacid'] . '.pem';
$path_key = IA_ROOT . '/addons/weisrc_dish/cert/apiclient_key_' . $_W['uniacid'] . '.pem';
$path_rootca = IA_ROOT . '/addons/weisrc_dish/cert/rootca_' . $_W['uniacid'] . '.pem';
$extras['CURLOPT_CAINFO'] = $path_rootca;
$extras['CURLOPT_SSLCERT'] = $path_cert;
$extras['CURLOPT_SSLKEY'] = $path_key;
load()->func('communication');
$procResult = null;
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
$response = ihttp_request($url, $xml, $extras);
if ($response['code'] == 200) {
$responseObj = simplexml_load_string($response['content'], 'SimpleXMLElement', LIBXML_NOCDATA);
$responseObj = (array)$responseObj;
$return['code'] = $responseObj['return_code'];
$return['result_code'] = $responseObj['result_code'];
$return['err_code'] = $responseObj['err_code'];
$return['msg'] = $responseObj['return_msg'];
$return['trade_no'] = $pars['partner_trade_no'];
$return['payment_no'] = $responseObj['payment_no'];
if ($responseObj['result_code'] != 'SUCCESS') {
print_r($responseObj);
exit;
}
return $return;
} else {
echo '证书错误:';
print_r($response);
exit;
}
}
//发放红包
public function sendRedPack($openid, $money, $send_name = '余额提现', $act_name = '余额提现', $wishing = '祝您生活愉快', $trade_no
= '')
{
global $_W;
$paysetting = uni_setting($_W['uniacid'], array('payment'));
$wechatpay = $paysetting['payment']['wechat'];
$account_info = $_W['account'];
$mchid = $wechatpay['mchid'];
$key = $wechatpay['apikey'];
$appid = $account_info['key'];
$money = $money * 100;
$num = 1;
$url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
$pars = array();
$pars['wxappid'] = $appid;
$pars['mch_id'] = $mchid;
$pars['nonce_str'] = random(32);
$pars['mch_billno'] = empty($trade_no) ? $mchid . date('Ymd') . rand(1000000000, 9999999999) : $trade_no;
$pars['send_name'] = $send_name;
$pars['re_openid'] = $openid;
$pars['total_amount'] = $money;
$pars['total_num'] = $num;
$pars['wishing'] = $wishing;
// $pars['client_ip'] = isset($wechat['ip']) ? $wechat['ip'] : $_SERVER['SERVER_ADDR'];
$pars['client_ip'] = $_SERVER['SERVER_ADDR'];
$pars['act_name'] = $act_name;
$pars['remark'] = $act_name;
ksort($pars, SORT_STRING);
$string1 = '';
foreach ($pars as $k => $v) {
$string1 .= "{$k}={$v}&";
}
$string1 .= "key={$key}";
$pars['sign'] = strtoupper(md5($string1));
$xml = array2xml($pars);
$extras = array();
$path_cert = IA_ROOT . '/addons/weisrc_dish/cert/apiclient_cert_' . $_W['uniacid'] . '.pem';
$path_key = IA_ROOT . '/addons/weisrc_dish/cert/apiclient_key_' . $_W['uniacid'] . '.pem';
$path_rootca = IA_ROOT . '/addons/weisrc_dish/cert/rootca_' . $_W['uniacid'] . '.pem';
$extras['CURLOPT_CAINFO'] = $path_rootca;
$extras['CURLOPT_SSLCERT'] = $path_cert;
$extras['CURLOPT_SSLKEY'] = $path_key;
load()->func('communication');
$procResult = null;
$response = ihttp_request($url, $xml, $extras);
if ($response['code'] == 200) {
$responseObj = simplexml_load_string($response['content'], 'SimpleXMLElement', LIBXML_NOCDATA);
$responseObj = (array)$responseObj;
$return['code'] = $responseObj['return_code'];
$return['result_code'] = $responseObj['result_code'];
$return['err_code'] = $responseObj['err_code'];
$return['msg'] = $responseObj['return_msg'];
$return['trade_no'] = $pars['mch_billno']; //返回订单号 用于重试
return $return;
}
}
PHP 递归生成子级数据 PHP
public function doMobileWenzhang_cbt(){
global $_GPC,$_W;
$wzid=$_GPC['wzid'];
$wzinfo=pdo_get('huoban_wenzhang',array('id'=>$wzid));
//递归查询下级访问用户
$list=pdo_fetchall("select * from ".tablename('huoban_readers')." where `zhuafanum`=1 and wzid={$wzid} ");
foreach ($list as $k=>$v){
$list[$k]['childs']=$this->cbt_dgsj($v['openid'],$v['wzid']);
}
echo "<pre/>";
var_dump($list);die;
echo json_encode(array('list'=>$list));
}
function cbt_dgsj($openid,$wzid){
//echo "1<br/>";
//echo "<pre/>";
$xjlist=pdo_fetchall("select * from ".tablename('huoban_readers')." where fromuser='{$openid}' and wzid={$wzid} ");
//var_dump($xjlist);
if(!empty($xjlist)){
foreach ($xjlist as $k=>$v){
//var_dump($xjlist);
$res=$this->cbt_dgsj($v['openid'],$v['wzid']);
$xjlist[$k]['childs']=$res;
}
/*echo "1<br/><pre/>";
var_dump($xjlist);*/
return $xjlist;
}
//var_dump($list);die;
return $xjlist;
}
PHP 文件写入数组 PHP
文件写入函数
file_put_contents(file,data,mode,context)
参数 描述 file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。 data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。 mode 可选。规定如何打开/写入文件。可能的值: FILE_USE_INCLUDE_PATH、FILE_APPEND、LOCK_EX 。context可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。
$arr = array(
'name'=>'张三'
)
$str = var_export($arr,TRUE);
file_put_contents($filename,$str);
PHP 常用函数 PHP
1.ceil() 函数向上舍入为最接近的整数。(例:获取总页数)
2.strtolower() 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式放回这个字
3.strtoupper() 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全部转换成大
4.trim($h,',') 移除字符串两侧的字符
5.array_rand($array,$number)从数组中随机选出一个或多个元素,并返回。
6.abs()函数的作用是返回一个数的绝对值。语法是abs(number),如果参数 number 是 float,则返回的类型也是 float,否则返回 integer(因为 float 通常比 integer 有更大的取值范围)。
7.floor()函数用来向下舍入为最接近的整数。语法是floor(number),表示返回不大于参数number的下一个整数,有小数部分则直接舍去取整。
8.number_format()函数表示通过千位分组来格式化数字,语法是number_format(number,decimals,decimalpoint,separator),该函数支持一个,两个或四个参数(不是三个)。如果除了参数number外未设置其他参数,则数字会被格式化为不带小数点且以逗号(,)作为千位分隔符。
9.str_shuffle()函数用于随机的打乱字符串中所有字符,语法是str_shuffle(string),返回已打乱的字符串。
10.wordwrap()函数表示按照指定长度对字符串进行折行处理,语法是wordwrap(string,width,break,cut),若函数成功执行,则返回折行后的字符串,如果失败,则返回false。
11.strrev()函数用于反转字符串,语法是strrev(string),返回已反转的字符串。
12.str_split()函数用于把字符串分割到数组中,语法是str_split(string,length),将字符串按规定长度分割组成数组。
13.str_repeat()函数用于重复使用指定字符串,语法是str_repeat(string,repeat),此函数把字符串重复指定的次数。
14.str_pad()函数用于把字符串填充到指定长度,语法是str_pad(string,length,pad_string,pad_type),把字符串填充为指定的长度。
15.is_file()函数用于判断给定文件名是否为一个正常的文件,语法是bool is_file ( string $filename ),如果文件存在且为正常的文件则返回 TRUE,否则返回 FALSE。
16.ltrim()函数用于删除字符串左边的空格或其他预定义字符,语法是ltrim(string,charlist),返回经过charlist规则处理后的字符串
17.rtrim()函数用于删除字符串右边的空格或其他预定义字符,语法是rtrim(string,charlist),返回经过charlist规则处理后的字符串
18.pi()函数用于获取圆周率值,语法是pi(),这个函数只是单纯的用来获取圆周率值
19.rand()函数表示从参数范围内得到一个随机数,语法是rand(X,Y),从两个参数范围内得到一个随机数,随机数大于等于X或者小于等于Y
20.mt_rand()函数表示从参数范围内得到一个随机数,语法是mt_rand(X,Y),从两个参数范围内得到一个随机数,随机数大于等于X或者小于等于Y 和rand相似,速度比rand快 可搭配mt_getrandmax使用
21.min()从所有参数中找到最小数 min(X,Y,Z) 或者min(array(X,Y,Z))
22.max()从所有参数中找到最大数 max(X,Y,Z) 或者max(array(X,Y,Z))
23.sqrt()函数的作用是对参数进行求平方根 sqrt(9) = 3
24.round()函数的作用是对浮点数进行四舍五入
25.pow()函数的作用是将一个数进行n次方计算后返回 pow(5,3)=5*5*5=125
26.fmod()函数的作用是两个数值做除法运算后的余数 fmod(5,3)=2;
27.ucfirst() 字符串首字母大写
28.ucwords() 把每个单词的首字符转换为大写
29.htmlentities() 把字符转换为 HTML 实体
30.htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。预定义的字符有:& (和号)成为 &," (双引号)成为 ",' (单引号)成为 ',< (小于)成为 <,> (大于)成为 >。
31.nl2br()在字符串中的新行(\n)之前插入换行符
32.strip_tags() 剥去字符串中的 HTML 标签
33.addcslashes() 返回在指定字符前添加反斜杠的字符串
34.stripcslashes() 删除由 addcslashes() 函数添加的反斜杠。
35.chr() 函数从指定的 ASCII 值返回字符。ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置 0,而十六进制值被定义为带前置 0x。
36.ord() 返回字符串的首个字符的 ASCII 值。
37.strcasecmp()比较两个字符串(不区分大小写)==0 相同
38.strcmp() 比较两个字符串(区分大小写)
39.strncmp() 比较字符串前n个字符,区分大小写
40.strncasecmp() 比较字符串前n个字符,不区分大小写
41.strtok() 逐一分割字符串
42.explode() 把字符串打散为数组
43.implode() 把数组元素组合为字符串
44.substr() 截取字符串
45.str_replace() 字符串替换操作,区分大小写 (使用场景更多是对单个字符串和连续字符串过滤替换处理. 注意:间隔字符串过滤替换,更多使用php正则匹配替换处理 )
46.str_ireplace() 字符串替换操作,不区分大小写
47.substr_count() 统计一个字符串,在另一个字符串中出现次数
48.substr_replace() 替换字符串中某串为另一个字符串 (使用场景对字符串长度位置检索进行过滤替换或插入处理. 注意:对中文字符串截取不适用,更多使用中文截取函数mb_substr() )
49.similar_text() 计算两个字符串的相似度,并返回匹配字符的数目
50.strrchr 返回一个字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
51.strchr()搜索字符串在另一字符串中的第一次出现。该函数是 strstr() 函数的别名。该函数是二进制安全的。该函数对大小写感敏。如需进行不区分大小写的搜索,请使用 stristr() 函数。
52.stristr() 返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写
53.strtr() 转换字符串中的某些字符
54.strpos() 寻找字符串中某字符最先出现的位置 区分大小写
55.stripos() 寻找字符串中某字符最先出现的位置 不区分大小写
PHP 处理日期、时间、时间戳相关操作 PHP
//时间相关
public function timeinfo(){
//获取今天0点-24点时间戳
$today = strtotime(date('Y-m-d', time()));
$todayend = $today + 24 * 60 * 60;
//获取本周第一天及最后一天
$weekfirst=strtotime(date('Y-m-d', strtotime('this week')));
$weeklast=strtotime(date('Y-m-d', strtotime('last day next week')));
//3.获取当天年份、月份、日及天数.
echo " 本月共有:".date("t")."天";
echo " 当前年份".date('Y');
echo " 当前月份".date('m');
echo " 当前几号".date('d');
//1.获取上个月第一天及最后一天.
echo date('Y-m-01', strtotime('-1 month'));
echo "<br/>";
echo date('Y-m-t', strtotime('-1 month'));
//2016-08-10这天 2个月后的日期
echo date("Y-m-d",strtotime("+2 month",strtotime("2016-08-10")));
//获取3 年、月、日 后的日期
echo date("Y-m-d",strtotime("+3 year",time()));
echo date("Y-m-d",strtotime("+3 month",time()));
echo date("Y-m-d",strtotime("+3 day",time()));
//获取今天、昨天、明天的日期
echo "今天:".date("Y-m-d")."<br>";
echo "昨天:".date("Y-m-d",strtotime("-1 day")), "<br>";
echo "明天:".date("Y-m-d",strtotime("+1 day")). "<br>";
echo "一周后:".date("Y-m-d",strtotime("+1 week")). "<br>";
echo "一周零两天四小时两秒后:".date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")). "<br>";
echo "下个星期四:".date("Y-m-d",strtotime("next Thursday")). "<br>";
echo "上个周一:".date("Y-m-d",strtotime("last Monday"))."<br>";
echo "一个月前:".date("Y-m-d",strtotime("last month"))."<br>";
echo "一个月后:".date("Y-m-d",strtotime("+1 month"))."<br>";
echo "十年后:".date("Y-m-d",strtotime("+10 year"))."<br>";
}
//获取当月第一天和最后一天
function getthemonth($date)
{
$firstday = date('Y-m-01', strtotime(date('Y-m-d')));
$lastday = date('Y-m-d', strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}
//计算两个时间戳相差天数
function timediff($begin_time,$end_time)
{
if($begin_time < $end_time){
$starttime = $begin_time;
$endtime = $end_time;
}else{
$starttime = $end_time;
$endtime = $begin_time;
}
//计算天数
$timediff = $endtime-$starttime;
$days = intval($timediff/86400);
//计算小时数
$remain = $timediff%86400;
$hours = intval($remain/3600);
//计算分钟数
$remain = $remain%3600;
$mins = intval($remain/60);
//计算秒数
$secs = $remain%60;
$res = array("day" => $days,"hour" => $hours,"min" => $mins,"sec" => $secs);
return $res;
}