```
<?php
namespace app\common\library;
use think\Exception;
use WeChatPay\Builder;
use WeChatPay\Crypto\Rsa;
use WeChatPay\Util\PemUtil;
use function EasyWeChat\Kernel\Support\get_server_ip;
class WxPay
{
public function goPay($data)
{
//CA证书及支付信息
$wxchat['appid'] = $data['appid'];
$wxchat['mchid'] = $data['mchid'];
$wxchat['api_cert'] = $data['api_cert'];
$wxchat['api_key'] = $data['api_key'];
$webdata = array(
'mch_appid' => $wxchat['appid'],
'mchid' => $wxchat['mchid'],
'nonce_str' => md5(time()),
'partner_trade_no' => $data['order_sn'], //商户订单号,需要唯一
'openid' => $data['openid'],//转账用户的openid
'check_name' => 'NO_CHECK', //OPTION_CHECK不强制校验真实姓名, FORCE_CHECK:强制 NO_CHECK:
'amount' => $data['money'] * 100, //付款金额单位为分
'desc' => $data['desc'],
'spbill_create_ip' => get_server_ip(),
);
foreach ($webdata as $k => $v) {
$tarr[] = $k . '=' . $v;
}
sort($tarr);
$sign = implode($tarr, '&');
$sign .= '&key=' . $data['secret'];
$webdata['sign'] = strtoupper(md5($sign));
$wget = $this->array2xml($webdata);
$pay_url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers';
$res = $this->curl_post_ssl($pay_url, $wget, $wxchat);
if (!$res) {
return array('status' => 0, 'msg' => "Can't connect the server");
}
$content = simplexml_load_string($res, 'SimpleXMLElement', LIBXML_NOCDATA);
if (strval($content->return_code) == 'FAIL') {
return array('status' => 0, 'msg' => strval($content->return_msg));
}
if (strval($content->result_code) == 'FAIL') {
return array('status' => 0, 'msg' => strval($content->err_code), ':' . strval($content->err_code_des));
}
$rdata = array(
'status' => 1,
'msg' => 'OK',
'mch_appid' => strval($content->mch_appid),
'mchid' => strval($content->mchid),
'device_info' => strval($content->device_info),
'nonce_str' => strval($content->nonce_str),
'result_code' => strval($content->result_code),
'partner_trade_no' => strval($content->partner_trade_no),
'payment_no' => strval($content->payment_no),
'payment_time' => strval($content->payment_time),
);
return $rdata;
}
public function array2xml($arr)
{
$str = '<xml>';
foreach ($arr as $k => $v) {
$str .= '<' . $k . '>' . $v . '</' . $k . '>';
}
$str .= '</xml>';
return $str;
}
public function curl_post_ssl($url, $vars, $wxchat)
{
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_TIMEOUT, 30);//设置执行最长秒数
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_URL, $url);//抓取指定网页
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 终止从服务端进行验证
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);//
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');//证书类型
curl_setopt($ch, CURLOPT_SSLCERT, ROOT_PATH . "/public" . $wxchat['api_cert']);//证书位置
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');//CURLOPT_SSLKEY中规定的私钥的加密类型
curl_setopt($ch, CURLOPT_SSLKEY, ROOT_PATH . "/public" . $wxchat['api_key']);//证书位置
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);//全部数据使用HTTP协议中的"POST"操作来发送
$data = curl_exec($ch);//执行回话
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
curl_close($ch);
return false;
}
}
}
```
- 面试
- php
- laravel
- 安装
- 创建数据
- 创建控制器
- 错误
- 权限认证
- 图形验证码
- 管理员
- 无限分类
- 视频播放
- 推流
- pc页面
- thinkphp5
- 表单提交安全验证
- crontab
- 获取下级所有数据
- 过滤敏感词
- 二维码
- 邀请码
- jwt token
- 笛卡尔
- 高并发解决优化
- 设置多语言
- 计算经纬度两点距离
- 分片上传
- centos swoole
- 查看swoole版本
- centos 安装 redis
- 把整数随机分成n份或者红包
- 生成随机字符串
- 获取上级
- 宝塔搭建nginx推拉流
- 生成二维码海报
- 二维数组去重
- 经纬度 ---边距 和判断是不是范围内
- workerman
- 扩展
- redis
- mysql
- mysql 主从复制
- 定位问题语句
- 列的选择规则
- Enum介绍
- 索引介绍
- 延迟关联
- in 查询陷阱
- limit 优化
- 事务
- 读写分离
- mysql 权限错误
- mysql计算距离
- mysql数据导出导入
- 索引失效
- mysql 语句技巧
- linux
- 配置nginx 高可用
- Nginx内核参数优化
- 配置优化
- nginx-keepalived实现高可用负载
- lvs+keepalived
- centos5关闭防火墙
- nginx操作
- linux操作
- mysql 安装
- php
- 安装phpadmin
- php7安装mongodb
- 查看php位置
- 查找开启的进程端口
- 守护进程
- centos安装php7.2
- centos 错误解决
- 安装php7错误
- mysql 错误
- 支付宝支付
- html
- js 倒计时
- go vscode 配置
- go util
- 获取两个数之间随机数
- java
- lambda
- 随机抽取
- lombok
- springboot
- 常见注解
- 接受参数常用注解
- 文件上传
- 上传错误日志拦截
- 拦截器
- 定时任务
- mybatis
- 关联查询
- 全局配置
- 缓存
- git
- 微信相关
- 体现到零钱
- 服务商转账
- 公众号小程序相关
- 小程序二维码
- svn
- layui