php
/**
* Được tạo bởi YuanPan.
* Người dùng: YuanPan
* Ngày: 2017/12/21
* Thời gian: 15:15
*/
không gian tên ứng dụng\api\dịch vụ;
sử dụng app\api\model\Product;
sử dụng app\lib\enum\OrderStatusEnum;
sử dụng think\Db;
sử dụng think\Exception;
sử dụng think\Loader;
sử dụng app\api\model\Order;
// Vẫn giới thiệu WxPay.API.php ở đây để hoàn thành phần giới thiệu
Loader::import('WxPay.WxPay',EXTEND_PATH,'.Api.php');
lớp WxNotify mở rộng \WxPayNotify
{
// Kế thừa lớp cha nên ghi đè trực tiếp phương thức
hàm công khai NotifyProcess($data, &$msg)
{
//Nếu thông tin thanh toán thành công được trả về
nếu($data['return_code'] = 'THÀNH CÔNG'){
$orderNo = $data['out_trade_no'];
Db::startTrans();
thử
{
//Xác định trạng thái đơn hàng
// Tại đây bạn có thể thực hiện cơ chế trên cơ sở dữ liệu
// Nói một cách đơn giản, khi một giao dịch thực thi câu lệnh SQL muốn vận hành các bản ghi bảng, trước tiên, nó sẽ gửi một yêu cầu đến cơ sở dữ liệu và khóa tập hợp bản ghi mà bạn truy cập.
// Trước khi giao dịch này giải phóng khóa này, các giao dịch khác không thể cập nhật những dữ liệu này.
Đặt hàng::nơi(['order_no'=>$orderNo])->khóa(true)->tìm();
// $order = Order::get(['order_no'=>$orderNo]);
//Nếu chưa thanh toán
nếu ($order->status == 1) {
$service = ứng dụng mới\api\service\Order();
//Truy vấn thông tin sản phẩm, tồn kho của mã đơn hàng
$stockStatus = $service->checkOrderStock($order->id);
// Nếu còn hàng tồn kho, cập nhật trạng thái đơn hàng và trừ đi tồn kho sản phẩm
nếu ($stockStatus['pass']) {
$this->updateOrderStatus($order->id, đúng);
$this->reduceStock($stockStatus);
// Nếu không còn hàng, trạng thái đơn hàng được sửa thành đã thanh toán nhưng đơn hàng không được xử lý.
} khác {
$this->updateOrderStatus($order->id, sai);
}
}
Db::commit();
//Quay lại WeChat
trả về giá trị đúng;
}catch (Ngoại lệ $e){
Db::rollback();
trả lại tiền;
}
}khác{
//Nếu WeChat trả về thông tin xử lý không thành công thì chúng tôi vẫn trả về true ở đây để bày tỏ thái độ của mình với WeChat
trả về giá trị đúng;
}
}
//Thanh toán thành công, trừ tồn kho sản phẩm
hàm riêng tư reduceStock($stockStatus)
{
//Di chuyển và trừ
foreach ($stockStatus['pStatusArray'] là $v) {
//Sử dụng phương thức setDec của tp5
Sản phẩm::nơi(['id'=>$v['id']])->setDec('stock',$v['count']);
}
}
//Thành công là true thì lệnh được sửa thành PAID, nếu sai thì sửa thành đã thanh toán nhưng lệnh không được xử lý, tương ứng với việc sửa đổi thông tin liệt kê
chức năng riêng tư updateOrderStatus($orderID,$success)
{
$status = $success?OrderStatusEnum::PAID:OrderStatusEnum::PAID_BUT_OUT_OF;
Đặt hàng::nơi(['id'=>$orderID])->cập nhật(['status'=>$status]);
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!