修改微信支付类,新增检测订单获取支付数据
This commit is contained in:
parent
ac9c3dee38
commit
a1b0d6556c
@ -8,6 +8,7 @@ use App\Constants\DoctorTitleCode;
|
||||
use App\Constants\HttpEnumCode;
|
||||
use App\Model\BasicLogisticsCompany;
|
||||
use App\Model\Hospital;
|
||||
use App\Model\OrderDetection;
|
||||
use App\Model\OrderInquiry;
|
||||
use App\Model\OrderInquiryCase;
|
||||
use App\Model\OrderInquiryCoupon;
|
||||
@ -683,7 +684,7 @@ class PatientOrderService extends BaseService
|
||||
$result['order_no'] = $order_no; // 订单编号
|
||||
$result['order_id'] = ""; // 订单主键id(问诊订单:order_inquiry_id 药品订单:order_product_id)
|
||||
$result['created_at'] = ""; // 创建时间
|
||||
$result['inquiry_type'] = 0; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药)
|
||||
$result['inquiry_type'] = 0; // 订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
|
||||
$result['pay_config'] = []; // 小程序支付配置
|
||||
|
||||
if ($order_type == 1) {
|
||||
@ -699,17 +700,18 @@ class PatientOrderService extends BaseService
|
||||
// 验证订单状态
|
||||
if ($order_inquiry['inquiry_status'] != 1) {
|
||||
$return_result['message'] = "订单状态错误";
|
||||
$return_result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['inquiry_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['inquiry_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
$return_result['data']['order_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['order_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
// 验证订单支付状态
|
||||
if ($order_inquiry['inquiry_pay_status'] != 1) {
|
||||
$return_result['message'] = "订单支付状态错误";
|
||||
$return_result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['inquiry_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['inquiry_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
$return_result['data']['order_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['order_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
@ -717,9 +719,9 @@ class PatientOrderService extends BaseService
|
||||
$diff_time = (strtotime($order_inquiry['created_at']) - time()) / 60;
|
||||
if ($diff_time >= 30){
|
||||
$return_result['message'] = "订单已过期";
|
||||
$return_result['data']['order_inquiry_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['inquiry_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['inquiry_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
$return_result['data']['order_id'] = $order_inquiry['order_inquiry_id'];
|
||||
$return_result['data']['order_status'] = $order_inquiry['inquiry_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_inquiry['inquiry_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
@ -738,7 +740,7 @@ class PatientOrderService extends BaseService
|
||||
|
||||
|
||||
// 获取预支付交易会话标识
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_inquiry['payment_amount_total'] * 100), $user_info['open_id']);
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_inquiry['payment_amount_total'] * 100), $user_info['open_id'],"问诊服务");
|
||||
if (empty($prepay)) {
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
@ -759,9 +761,9 @@ class PatientOrderService extends BaseService
|
||||
// 验证订单状态
|
||||
if ($order_product['order_product_status'] != 1) {
|
||||
$return_result['message'] = "订单状态错误";
|
||||
$return_result['data']['order_product_id'] = $order_product['order_product_id'];
|
||||
$return_result['data']['order_product_status'] = $order_product['order_product_status'];
|
||||
$return_result['data']['pay_status'] = $order_product['pay_status'];
|
||||
$return_result['data']['order_id'] = $order_product['order_product_id'];
|
||||
$return_result['data']['order_status'] = $order_product['order_product_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_product['pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
@ -770,7 +772,7 @@ class PatientOrderService extends BaseService
|
||||
$return_result['message'] = "订单支付状态错误";
|
||||
$return_result['data']['order_product_id'] = $order_product['order_product_id'];
|
||||
$return_result['data']['order_product_status'] = $order_product['order_product_status'];
|
||||
$return_result['data']['pay_status'] = $order_product['pay_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_product['pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
@ -780,7 +782,7 @@ class PatientOrderService extends BaseService
|
||||
$return_result['message'] = "订单已过期";
|
||||
$return_result['data']['order_product_id'] = $order_product['order_product_id'];
|
||||
$return_result['data']['order_product_status'] = $order_product['order_product_status'];
|
||||
$return_result['data']['pay_status'] = $order_product['pay_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_product['pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
@ -797,7 +799,67 @@ class PatientOrderService extends BaseService
|
||||
$WechatPay = new WechatPay(1,2);
|
||||
|
||||
// 获取预支付交易会话标识
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_product['payment_amount_total'] * 100), $user_info['open_id']);
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_product['payment_amount_total'] * 100), $user_info['open_id'],"问诊服务");
|
||||
if (empty($prepay)) {
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
// 获取小程序支付配置
|
||||
$pay_config = $WechatPay->getAppletsPayConfig($prepay['prepay_id']);
|
||||
}
|
||||
} elseif ($order_type == 3) {
|
||||
// 检测订单
|
||||
// 获取检测订单数据
|
||||
$params = array();
|
||||
$params['detection_no'] = $order_no;
|
||||
$params['patient_id'] = $user_info['client_user_id'];
|
||||
$order_detection = OrderDetection::getOne($params);
|
||||
if (empty($order_detection)) {
|
||||
return fail(HttpEnumCode::HTTP_ERROR, "非法订单");
|
||||
}
|
||||
|
||||
// 验证订单状态
|
||||
if ($order_detection['detection_status'] != 1) {
|
||||
$return_result['message'] = "订单状态错误";
|
||||
$return_result['data']['order_id'] = $order_detection['order_detection_id'];
|
||||
$return_result['data']['order_status'] = $order_detection['detection_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_detection['detection_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
// 验证订单支付状态
|
||||
if ($order_detection['inquiry_pay_status'] != 1) {
|
||||
$return_result['message'] = "订单支付状态错误";
|
||||
$return_result['data']['order_id'] = $order_detection['order_detection_id'];
|
||||
$return_result['data']['order_status'] = $order_detection['detection_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_detection['detection_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
// 验证订单过期支付时间
|
||||
$diff_time = (strtotime($order_detection['created_at']) - time()) / 60;
|
||||
if ($diff_time >= 30){
|
||||
$return_result['message'] = "订单已过期";
|
||||
$return_result['data']['order_id'] = $order_detection['order_detection_id'];
|
||||
$return_result['data']['order_status'] = $order_detection['detection_status'];
|
||||
$return_result['data']['order_pay_status'] = $order_detection['detection_pay_status'];
|
||||
return success($return_result);
|
||||
}
|
||||
|
||||
$result['order_id'] = $order_detection['order_detection_id'];
|
||||
$result['created_at'] = $order_detection['created_at'];
|
||||
|
||||
// 获取订单金额
|
||||
$result['amount_total'] = $order_detection['amount_total']; // 订单金额
|
||||
$result['payment_amount_total'] = $order_detection['amount_total']; // 实际订单金额
|
||||
$result['coupon_amount_total'] = 0; // 优惠金额
|
||||
|
||||
if ($order_detection['payment_amount_total'] > 0 ){
|
||||
// 发起支付
|
||||
$WechatPay = new WechatPay(1,3);
|
||||
|
||||
// 获取预支付交易会话标识
|
||||
$prepay = $WechatPay->getJsapiPrepayId($order_no, (int)round($order_detection['payment_amount_total'] * 100), $user_info['open_id'],"检测服务");
|
||||
if (empty($prepay)) {
|
||||
return fail(HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
@ -46,6 +46,8 @@ return [
|
||||
"inquiry_refund_notify_url" => env('PATIENT_WECHAT_INQUIRY_REFUND_NOTIFY_URL', 'callback/wxpay/inquiry/refund'),
|
||||
"product_pay_notify_url" => env('PATIENT_WECHAT_PRODUCT_PAY_NOTIFY_URL', 'callback/wxpay/product/success'),
|
||||
"product_refund_notify_url" => env('PATIENT_WECHAT_PRODUCT_REFUND_NOTIFY_URL', 'callback/wxpay/product/refund'),
|
||||
"detection_pay_notify_url" => env('PATIENT_WECHAT_DETECTION_PAY_NOTIFY_URL', 'callback/wxpay/detection/success'),
|
||||
"detection_refund_notify_url" => env('PATIENT_WECHAT_DETECTION_REFUND_NOTIFY_URL', 'callback/wxpay/detection/refund'),
|
||||
],
|
||||
"pharmacist" => [
|
||||
"app_id" => env('DOCTOR_WECHAT_APP_ID', 'wxc83296720404aa7b'),
|
||||
|
||||
@ -28,7 +28,7 @@ class WechatPay
|
||||
|
||||
/**
|
||||
* @param string $user_type 用户类型(1:患者端 2:专家端 3:药师端)
|
||||
* @param int $order_type 订单类型(1:问诊订单 2:药品订单)
|
||||
* @param int $order_type 订单类型(1:问诊订单 2:药品订单 3:检测订单)
|
||||
*/
|
||||
public function __construct(string $user_type,int $order_type)
|
||||
{
|
||||
@ -46,7 +46,7 @@ class WechatPay
|
||||
throw new BusinessException("系统配置错误", HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
if (!in_array($order_type,[1,2])){
|
||||
if (!in_array($order_type,[1,2,3])){
|
||||
throw new BusinessException("订单类型错误", HttpEnumCode::SERVER_ERROR);
|
||||
}
|
||||
|
||||
@ -60,6 +60,11 @@ class WechatPay
|
||||
$this->refund_notify_url = $this->config['product_refund_notify_url'];
|
||||
}
|
||||
|
||||
if ($order_type == 3){
|
||||
$this->pay_notify_url = $this->config['detection_pay_notify_url'];
|
||||
$this->refund_notify_url = $this->config['detection_refund_notify_url'];
|
||||
}
|
||||
|
||||
$app_env = config('app_env','dev');
|
||||
if ($app_env == "prod"){
|
||||
$this->domain_name = env('DOMAIN_NAME_PROD','https://prod.hospital.applets.igandanyiyuan.com/');
|
||||
@ -122,11 +127,12 @@ class WechatPay
|
||||
* @param string $out_trade_no 商户系统内部订单号
|
||||
* @param int $total 支付金额(实际金额x100)
|
||||
* @param string $openid
|
||||
* @param string $description 备注
|
||||
* @return array
|
||||
* @throws ContainerExceptionInterface
|
||||
* @throws NotFoundExceptionInterface
|
||||
*/
|
||||
public function getJsapiPrepayId(string $out_trade_no,int $total,string $openid): array
|
||||
public function getJsapiPrepayId(string $out_trade_no,int $total,string $openid,string $description): array
|
||||
{
|
||||
$app = $this->createApp();
|
||||
|
||||
@ -134,7 +140,7 @@ class WechatPay
|
||||
"mchid" => $this->pay_config['mch_id'], // <---- 商户号
|
||||
"out_trade_no" => $out_trade_no, // 商户系统内部订单号
|
||||
"appid" => $this->config['app_id'],
|
||||
"description" => "问诊服务",
|
||||
"description" => $description,
|
||||
"notify_url" => $this->domain_name . $this->pay_notify_url,
|
||||
"amount" => [
|
||||
"total" => $total,//订单总金额,单位为分。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user