food_server/FlyCube/Api/Controller/PayController.class.php
tk df4ecc9c68 【类 型】:
【主	题】:
【描	述】:
	[原因]:
	[过程]:
	[影响]:
【结	束】

# 类型 包含:
# feat:新功能(feature)
# fix:修补bug
# docs:文档(documentation)
# style: 格式(不影响代码运行的变动)
# refactor:重构(即不是新增功能,也不是修改bug的代码变动)
# test:增加测试
# chore:构建过程或辅助工具的变动
2024-06-05 21:00:43 +08:00

112 lines
4.1 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 Yansongda\Pay\Pay;
use PhpMqtt\Client\MqttClient;
use PhpMqtt\Client\Exceptions\MqttClientException;
use PhpMqtt\Client\ConnectionSettings;
class PayController extends PublicController
{
/**
* @description: 子类的初始化
*/
public function _initialize()
{
}
/**
* @description: Yansongda pay类的参数
*/
protected $config;
/**
* @description: 发起小程序支付
*/
public function pay()
{
//父级构造函数
parent::_initialize();
//初始化 pay类的参数
$this->config = [
'wechat' => [
'default' => [
'mch_id' => C('weixin')['mch_id'], // 必填-商户号
'mch_secret_key' => C('weixin')['mch_secret_key'], // 必填-v3商户秘钥
'mch_secret_cert' => C('weixin')['mch_secret_cert'], // 必填-商户私钥路径
'mch_public_cert_path' => C('weixin')['mch_public_cert_path'], // 必填-商户公钥证书路径
'notify_url' => C('host') . 'flycube.php/Api/Pay/notifyCallback', // 必填-回调通知地址
'mini_app_id' => C('weixin')['appid'], // 选填-小程序 的 app_id
'wechat_public_cert_path' => [ // 必填-微信平台公钥证书路径
'5878026B07BD819CCC25AC95FA31AE45BB6BC0D9' => C('weixin')['wechat_public_cert_path'],
],
],
],
'logger' => [ // optional
'enable' => true,
'file' => C('weixin')['payLogger_path'],
'level' => 'info', // 建议生产环境等级调整为 info开发环境为 debug
'type' => 'single', // optional, 可选 daily
'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
],
'http' => [ // optional
'timeout' => 5.0,
'connect_timeout' => 5.0,
],
];
//获取订单信息
$where['order_sn'] = $_REQUEST['order_sn'];
$orderDb = D('order');
$order = $orderDb->where($where)->find();
//设置获取签名的订单参数
$orderParameter = [
'out_trade_no' => $order['order_sn'],
'description' => $order['shop_id'], //商品名称
'amount' => [
'total' => $order['total_price'] * 100, //单位:分
'currency' => 'CNY',
],
'payer' => [
'openid' => $this->openid,
]
];
try {
$pay = Pay::wechat($this->config)->mini($orderParameter);
echo json_encode(array('status' => 1, 'payMsg' => $pay));
} catch (\Exception $e) {
echo json_encode(array('status' => 0, 'msg' => 'Error: ' . $e->getMessage()));
}
}
/**
* @description: 支付成功后 腾讯服务器的回调
*/
public function notifyCallback()
{
$this->publish('demo1', 'start');
// 实例化 Yansongda Pay
$pay = Pay::wechat($this->config);
$callBackData = $pay->callback();
$this->publish('demo', json_encode($callBackData));
// try {
// // 获取并验证回调数据
// $callBackData = $pay->callback();
// // 验证成功,处理业务逻辑
// if ($callBackData['trade_state'] == 'SUCCESS') {
// $where['order_sn'] = $callBackData['out_trade_no']; // 获取订单号
// $orderDb = D('order'); // 实例化订单模型
// $data['status'] = 'pending'; //付款状态
// $orderDb->where($where)->data($data)->save(); //更改订单
// }
// } catch (\Exception $e) {
// // 捕获并处理可能的异常
// // 可以记录错误日志以便排查问题
// // error_log('支付回调错误:' . $e->getMessage());
// }
// 返回成功响应给腾讯服务器,告知通知已处理
return $pay->success();
}
}