我有process_ipn
在上运行的方法init
行动挂钩。看起来它是在贝宝返回商户后被解雇的。在这种方法下,我可以找到付款状态,如completed
, pending
, failed
来自贝宝。然后,将其保存到数据库中。
update_user_meta( $user_id, \'status\', \'completed\' );
我正在从PayPal返回商户并添加
user_id
和
form_id
返回url。我用了
login_message
根据付款状态筛选以覆盖消息。
add_filter( \'login_message\', array( $this,\'custom_login_message\' ) );
public function custom_login_message() {
$return = base64_decode ( $_GET[\'wdb_return\'] );
$return = explode( \'&\', $return );
$return = explode( \'=\', $return[1] );
$user_id = isset( $return[1] ) ? $return[1] : -1;
if( \'completed\' === get_user_meta( $user_id, \'status\', true ) ) {
return print_notice( __( \'Payment Completed. Now login.\',\'wdp\' ) );
} else {
return print_notice( __( \'Payment Failed\',\'wdp\' ) );
}
}
返回商户将返回登录页面。出现登录页面后,状态更新太晚的问题。所以
Payment Failed
如果我在付款后立即单击return to merchant(返回给商户),则会显示。如果我在付款后等待几分钟,然后返回商户,就可以了。
请注意$user_id
从PayPal的返回url获取,并且有效。
解决方案是什么?
谢谢