新增创建订单发起支付

This commit is contained in:
2023-03-03 10:50:17 +08:00
parent e620c3f360
commit e13dcd1998
7 changed files with 202 additions and 12 deletions
+20
View File
@@ -4,6 +4,8 @@ namespace App\Controller;
use App\Request\InquiryRequest;
use App\Services\InquiryService;
use Extend\Wechat\WechatPay;
use Hyperf\Snowflake\IdGeneratorInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Psr\Http\Message\ResponseInterface;
@@ -49,4 +51,22 @@ class InquiryController extends AbstractController
$data = $InquiryService->getPatientInquiryCase();
return $this->response->json($data);
}
public function addInquiryOrderTest(){
$WechatPay = new WechatPay(2);
$generator = $this->container->get(IdGeneratorInterface::class);
$out_trade_no = $generator->generate();
dump($out_trade_no);
// 获取jsapi的prepay_id
$total = 100;
$openid = "o9gYG441zEAHuYoNX7lwFKiQBzKE";
$result = $WechatPay->getJsapiPrepayId($out_trade_no,$total,$openid);
// 获取小程序支付配置
$config = $WechatPay->getAppletsPayConfig($result['prepay_id']);
dump($config);
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Controller;
use App\Utils\Log;
/**
* 支付
*/
class PayController extends AbstractController
{
// 微信支付回调
public function wxCallBack(){
$request_params = $this->request->all();
Log::getInstance()->info(json_encode($request_params,JSON_UNESCAPED_UNICODE));
}
}
+6
View File
@@ -28,6 +28,7 @@ class InquiryRequest extends FormRequest
'weight',
'inquiry_type', // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
'inquiry_mode', // 订单问诊方式(1:图文 2:视频 3:语音 4:电话 5:会员)
'client_type', // 客户端类型(1:手机 2:电脑)
],
];
@@ -55,6 +56,7 @@ class InquiryRequest extends FormRequest
'is_allergy_history' => ['sometimes','numeric','min:0','max:1'],
'is_family_history' => ['sometimes','numeric','min:0','max:1'],
'is_pregnant' => ['sometimes','numeric','min:0','max:1'],
'client_type' => 'required|integer|min:1|max:2',
];
}
@@ -87,6 +89,10 @@ class InquiryRequest extends FormRequest
'is_pregnant.numeric' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_pregnant.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'is_pregnant.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.required' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.integer' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.min' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
'client_type.max' => HttpEnumCode::getMessage(HttpEnumCode::CLIENT_HTTP_ERROR),
];
}
}
+33 -8
View File
@@ -15,6 +15,7 @@ use App\Model\PatientFamilyPersonal;
use App\Model\Product;
use App\Model\UserDoctor;
use App\Utils\PcreMatch;
use Extend\Wechat\WechatPay;
use Hyperf\Amqp\Producer;
use Hyperf\DbConnection\Db;
use Hyperf\Snowflake\IdGeneratorInterface;
@@ -99,6 +100,14 @@ class InquiryService extends BaseService
$CouponService = new CouponService();
$user_coupon = $CouponService->getUserUsableCouponOne($user_info['user_id'], $request_params['inquiry_type']);
// 确定支付渠道
// 支付渠道(1:小程序支付 2:微信扫码支付)
if ($request_params['inquiry_pay_channel'] == 1){
$inquiry_pay_channel = 1;
}elseif ($request_params['inquiry_pay_channel'] == 2){
$inquiry_pay_channel = 2;
}
Db::beginTransaction();
$generator = $this->container->get(IdGeneratorInterface::class);
@@ -117,6 +126,7 @@ class InquiryService extends BaseService
$data['inquiry_type'] = $request_params['inquiry_type'];
$data['inquiry_mode'] = $request_params['inquiry_mode'];
$data['inquiry_status'] = 1;// 1:待支付
$data['inquiry_pay_channel'] = $inquiry_pay_channel ?? 0;// 支付渠道(1:小程序支付 2:微信扫码支付)
$data['inquiry_no'] = $generator->generate();// 订单编号
$data['amount_total'] = $inquiry_price;// 订单金额
$data['payment_amount_total'] = $payment_amount_total;// 实际付款金额
@@ -230,19 +240,33 @@ class InquiryService extends BaseService
}
}
// 增加至退款延迟队列
$data = array();
$data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
// 发起支付
$WechatPay = new WechatPay(1);
$message = new CancelUnpayOrdersDelayDirectProducer($data);
$message->setDelayMs(60 * 30 * 1000);
$producer = $this->container->get(Producer::class) ;
$res = $producer->produce($message);
if(!$res){
// 获取预支付交易会话标识
$total = $inquiry_price * 100;
$prepay = $WechatPay->getJsapiPrepayId($order_inquiry['inquiry_no'],$total,$user_info['open_id']);
if (empty($prepay)){
Db::rollBack();
return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
}
// 获取小程序支付配置
$pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']);
// 增加至退款延迟队列
// $data = array();
// $data['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
//
// $message = new CancelUnpayOrdersDelayDirectProducer($data);
// $message->setDelayMs(60 * 30 * 1000);
// $producer = $this->container->get(Producer::class) ;
// $res = $producer->produce($message);
// if(!$res){
// Db::rollBack();
// return fail(HttpEnumCode::SERVER_ERROR, "订单创建失败");
// }
Db::commit();
} catch (\Exception $e) {
Db::rollBack();
@@ -255,6 +279,7 @@ class InquiryService extends BaseService
$result['order_inquiry_id'] = $order_inquiry['order_inquiry_id']; // 订单主键id
$result['created_at'] = date('Y-m-d H:i:s',strtotime($order_inquiry['created_at'])); // 创建时间
$result['inquiry_type'] = $order_inquiry['inquiry_type']; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
$result['pay_config'] = $pay_config; // 小程序支付配置
return success($result);
}
+1
View File
@@ -23,6 +23,7 @@ class Auth
"/area/province" => "get",// 获取省份信息
"/area/city" => "get", // 获取城市信息
"/area/county" => "get", // 获取区县信息
"/pay/wx/callback" => "post", // 微信支付回调
];
}