在新版本的微信支付SDK中(本人使用的是:php_sdk_v3.0.10),微信支付回调返回的是数据类型是:对象。在一般的小程序商城中,接收微信支付回调后,就是对订单支付状态的更改,从未支付->已经支付,并对相对应产品的库存量的减少客户购买的产品数量,以下是参考代码:public function NotifyProcess($objData, $config, &$msg)
{
$data = $objData->GetValues();
if ($data['result_code'] == 'SUCCESS') {
$orderNo = $data['out_trade_no'];
Db::startTrans();
try {
$order = OrderModel::where('order_no', '=', $orderNo)->lock(true)->find();
if ($order->status == 1) {
$service = new OrderService();
$stockStatus = $service->checkOrderStock($order->id);
if ($stockStatus['pass']) {
$this->updateOrderStatus($order->id, true);
$this->reduceStock($stockStatus);
} else {
$this->updateOrderStatus($order->id, false);
}
}
Db::commit();
} catch (Exception $ex) {
Db::rollback();
Log::error($ex);
// 如果出现异常,向微信返回false,请求重新发送通知
return false;
}
}
return true;
}
其中更改订单状态:private function updateOrderStatus($orderID, $success)
{
$status = $success ? OrderStatusEnum::PAID : OrderStatusEnum::PAID_BUT_OUT_OF;
OrderModel::where('id', '=', $orderID)->update(['status' => $status]);
}
减少产品库存量:private function reduceStock($stockStatus)
{
foreach ($stockStatus['pStatusArray'] as $singlePStatus) {
Product::where('id', '=', $singlePStatus['id'])
->setDec('stock', $singlePStatus['counts']);
}
}