我正在构建自定义支付网关,我需要通过ajax处理成功响应,并将交易ID映射到订单ID。我正在查询以获取last_order_id。这是获取订单ID的正确方法,还是如果我使用这种方式获取订单ID会出现任何问题。
<script>
jQuery.ajax({
type : "POST",
url: 'http://example.com/?wc-api=callback',
// .........
</script>
function callback(){
// handle the response here
}
function get_last_order_id(){
global $wpdb;
$statuses = array_keys(wc_get_order_statuses());
$statuses = implode( "','", $statuses );
// Getting last Order ID (max value)
$results = $wpdb->get_col( "
SELECT MAX(ID) FROM {$wpdb->prefix}posts
WHERE post_type LIKE 'shop_order'
AND post_status IN ('$statuses')
" );
return reset($results);
}
答案 0 :(得分:0)
已更新
在正常过程中,您可以在WC_Checkout
Class的process_checkout()
方法中看到
$order_id = $this->create_order( $posted_data ); // on line 1067
或在WC_Checkout
Class中使用create_order()
方法:
$order_id = $order->save(); // on line 365
哪个给出订单ID
现在在process_checkout()
方法中,您可以:
if ( WC()->cart->needs_payment() ) {
$this->process_order_payment( $order_id, $posted_data['payment_method'] );
如果您查看process_order_payment()
method,将会看到:
// Store Order ID in session so it can be re-used after payment failure
WC()->session->set( 'order_awaiting_payment', $order_id );
将在Woocommerce会话中存储订单ID
因此,要通过AJAX 获取订单ID (生成时),您将在Wordpress Ajax PHP函数内部使用:
$order_id = WC()->session->get( 'order_awaiting_payment' );
并将其返回给jQuery。