主站点使用WordPress/WooCommerce,远程站点服务于前端;是否可以使用WooCommerce REST API处理结帐表单,并接收指向所选支付网关的重定向URL
我尝试创建一个自定义AJAX函数,但它似乎需要提交表单上的nonce字段,这是有问题的,因为前端不在同一台服务器上。
使用WC REST API的流程结账
1 个回复
最合适的回答,由SO网友:Jack Song 整理而成
要处理WooCommerce订单的付款,工作流如下所示:
创建WooCommerce订单,使用其中一个WC\\U付款网关处理此订单的付款(默认为挂起->处理,或在订单为空时完成)
- IMHO,步骤二可以按以下方式执行:
使用Stripe或PayPal等框架,使用前端lib标记支付信息
add_action( \'rest_api_init\', \'wc_rest_payment_endpoints\' );
function wc_rest_payment_endpoints() {
/**
* Handle Payment Method request.
*/
register_rest_route( \'wc/v2\', \'payment\', array(
\'methods\' => \'POST\',
\'callback\' => \'wc_rest_payment_endpoint_handler\',
) );
}
function wc_rest_payment_endpoint_handler( $request = null ) {
$response = array();
$parameters = $request->get_json_params();
$payment_method = sanitize_text_field( $parameters[\'payment_method\'] );
$order_id = sanitize_text_field( $parameters[\'order_id\'] );
$payment_token = sanitize_text_field( $parameters[\'payment_token\'] );
$error = new WP_Error();
if ( $payment_method === "stripe" ) {
$wc_gateway_stripe = new WC_Gateway_Stripe();
$_POST[\'stripe_token\'] = $payment_token;
$payment_result = $wc_gateway_stripe->process_payment( $order_id );
if ( $payment_result[\'result\'] === "success" ) {
$response[\'code\'] = 200;
$response[\'message\'] = __( "Your Payment was Successful", "wc-rest-payment" );
} else {
return new WP_REST_Response( array("c"), 123 );
$response[\'code\'] = 401;
$response[\'message\'] = __( "Please enter valid card details", "wc-rest-payment" );
}
} else {
$response[\'code\'] = 405;
$response[\'message\'] = __( "Please select an available payment method. Supported payment method can be found at https://wordpress.org/plugins/wc-rest-payment/#description", "wc-rest-payment" );
}
return new WP_REST_Response( $response, 123 );
}
如果您正在寻找一种无麻烦的方法来实现这一点,请签出我们的插件WC REST Payment. 它支持WooCommerce网关,包括Stripe, PayPal Express, 贝宝标准,直接银行转账,支票,货到付款。
结束