food_server/FlyCube/Api/Controller/PayController.class.php
2024-05-30 19:16:59 +08:00

107 lines
3.6 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Api\Controller;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Yansongda\Pay\Pay;
use Yansongda\Pay\Logger;
class PayController extends PublicController
{
private $openid; // 用户openid
private $session_key; // 用户session_key
protected $config = [
'wechat' => [
'default' => [
'mch_id' => '1625070753', // 必填-商户号
'mch_secret_key' => 'qwertyuiopasdfghjklzxcvbnm123456', // 必填-v3商户秘钥
'mch_secret_cert' => 'C:/phpstudy_pro/cert/apiclient_key.pem', // 必填-商户私钥路径
'mch_public_cert_path' => 'C:/phpstudy_pro/cert/apiclient_cert.pem', // 必填-商户公钥证书路径
'notify_url' => 'https://szdot.top/flycube.php/Api/Pay/notifyCallback', // 必填-回调通知地址
'mini_app_id' => 'wx8347571d6893a383', // 选填-小程序 的 app_id
// 必填-微信平台公钥证书路径
'wechat_public_cert_path' => [
'5878026B07BD819CCC25AC95FA31AE45BB6BC0D9' => 'C:/phpstudy_pro/cert/wechatpay_5878026B07BD819CCC25AC95FA31AE45BB6BC0D9.pem',
],
],
],
'logger' => [ // optional
'enable' => true,
'file' => 'C:/phpstudy_pro/cert/logs/wechat.log',
'level' => 'info', // 建议生产环境等级调整为 info开发环境为 debug
'type' => 'single', // optional, 可选 daily
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
],
];
/**
* @description: 子类的初始化
*/
public function _initialize()
{
parent::_initialize();
// 解析HTTP请求头中的token
if ($_REQUEST['order_sn']) {
//解构文件头里面的token
$server = isset($_SERVER) ? $_SERVER : "";
$token = $server['HTTP_TOKEN'];
$jwtKey = C('jwtKey'); // jwt密钥
$jwt = JWT::decode($token, new Key($jwtKey, 'HS256')); // 使用密钥和 HS256 算法对 JWT 进行解码
$res_token = (array) $jwt; // 将解码后的对象转换为数组
//token过期
if (empty($res_token)) {
echo json_encode(array('status' => -1, 'msg' => '帐号认证过期!'));
exit();
}
//token检测通过 获取用户id
$this->openid = $res_token['openid'];
$this->session_key = $res_token['session_key'];
}
}
/**
* @description: 发起小程序支付
*/
public function pay()
{
$order = [
'out_trade_no' => time() . '',
'description' => 'subject-测试',
'amount' => [
'total' => 1,
'currency' => 'CNY',
],
'payer' => [
'openid' => $this->openid,
]
];
try {
$pay = Pay::wechat($this->config)->mini($order);
Logger::debug('Paying...', $order->all()); //打印日志
echo json_encode($pay);
} catch (\Exception $e) {
echo 'Error: ' . $e->getMessage();
}
}
public function notifyCallback()
{
$pay = Pay::wechat($this->config);
try {
$data = $pay->callback(); // 是的,验签就这么简单!
} catch (\Exception $e) {
// $e->getMessage();
}
return $pay->success();
}
}