Woocommerce:当我下订单以使用银行 API 处理付款时出现运行时错误

Posted

技术标签:

【中文标题】Woocommerce:当我下订单以使用银行 API 处理付款时出现运行时错误【英文标题】:Woocommerce: Runtime error when I place order to process payment using bank API 【发布时间】:2019-04-28 02:18:36 【问题描述】:

我正在使用带有 woocommerce 的亚美尼亚银行 API 作为额外的付款方式。当我下订单时,它给了我运行时错误。我附上了我收到的图像或错误以及我正在使用的代码。

id = '美国银行'; // 支付网关插件 ID $this->icon = ''; // 将在结帐页面上显示的图标的 URL,靠近您的网关名称 $this->has_fields = true; // 如果您需要自定义信用卡表单 $this->method_title = '美国银行网关'; $this->method_description = 'Ameria 支付网关的描述'; $this->支持 = 数组( '产品', “订阅” ); // 带有所有选项字段的方法 $this->init_form_fields(); // 加载设置。 $this->init_settings(); $this->title = $this->get_option('title'); $this->description = $this->get_option('description'); $this->enabled = $this->get_option('enabled'); //$this->testmode = 'yes' === $this->get_option('testmode'); $this->ClientID = $this->get_option('ClientID'); $this->Username = $this->get_option('用户名'); $this->Password = $this->get_option('密码'); // 这个动作钩子保存设置 add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); // 我们需要自定义 javascript 来获取令牌 //add_action('wp_enqueue_scripts', array($this, 'payment_scripts')); // 你也可以在这里注册一个 webhook // add_action( 'woocommerce_api_webhook name', array( $this, 'webhook' ) ); /** * 插件选项,我们也在第 3 步处理 */ 公共函数 init_form_fields() $this->form_fields = 数组( '启用' => 数组( 'title' => '启用/禁用', 'label' => '启用 AmeriaBank 网关', '类型' => '复选框', '描述' => '', '默认' => '否' ), '标题' => 数组( '标题' => '标题', '类型' => '文本', 'description' => '这控制了用户在结帐时看到的标题。', '默认' => '信用卡', 'desc_tip' => 真, ), '描述' => 数组( '标题' => '描述', '类型' => '文本区域', 'description' => '这控制了用户在结帐时看到的描述。', 'default' => '通过我们超酷的支付网关使用您的信用卡支付。', ), 'ClientID' => 数组( 'title' => '客户 ID', '类型' => '文本' ), '用户名' => 数组( '标题' => '用户名', '类型' => '文本' ), '密码' => 数组( '标题' => '密码', '类型' => '文本' ) ); 公共功能 process_payment( $order_id ) 全球$woocommerce; $order = new WC_Order($order_id); // 美国银行参数 $this->description = "[description]"; $this->orderID = $order_id; $this->paymentAmount = $order->get_total(); $_SESSION['eli_cart_total'] = $this->paymentAmount; $this->backURL = add_query_arg('key', $order->order_key, add_query_arg('order', $order_id, get_permalink(woocommerce_get_page_id('thanks')))); $选项 = 数组( 'soap_version' => SOAP_1_1, '例外' => 真的, '跟踪' => 1, 'wdsl_local_copy' => 真 ); $client = new SoapClient("https://testpayments.ameriabank.am/webservice/PaymentService.svc?wsdl", $options); $args['paymentfields'] = 数组( 'ClientID' => $this->ClientID, '用户名' => $this->用户名, '密码' => $this->密码, '描述' => $this->描述, 'OrderID' => $this->orderID, 'PaymentAmount' => $this->paymentAmount, 'backURL' => $this->backURL ); $webService = $client->GetPaymentID($args); $_SESSION['pid'] = $webService->GetPaymentIDResult->PaymentID; $this->liveurl = 'https://testpayments.ameriabank.am/forms/frm_paymentstype.aspx?clientid='.$this->ClientID.'&clienturl='.$this->backURL.'&lang=am&paymentid=' .$webService->GetPaymentIDResult->PaymentID; // 返回谢谢重定向 返回数组( '结果' => '成功', '重定向' => $this->liveurl ); /** * 订单接收页面的输出。 * * @访问公共 * @return 无效 */ 功能thankyou_page($order_id) 全球$woocommerce; $选项 = 数组( 'soap_version' => SOAP_1_1, '例外' => 真的, '跟踪' => 1, 'wdsl_local_copy' => 真 ); $client = new SoapClient("https://testpayments.ameriabank.am/webservice/PaymentService.svc?wsdl", $options); $total = $_SESSION['eli_cart_total']; $args['paymentfields'] = 数组( 'ClientID' => $this->ClientID, '用户名' => $this->用户名, '密码' => $this->密码, 'PaymentAmount' => $total, 'OrderID' => $order_id ); $webService = $client->GetPaymentFields($args); if($webService->GetPaymentFieldsResult->respcode == "00") $order = new WC_Order($order_id); $type = $webService->GetPaymentFieldsResult->paymenttype; 如果($类型==“1”) $client->Confirmation($args); $order->update_status('on-hold', __( '等待信用卡支付', 'woocommerce' )); // 减少库存水平 $order->reduce_order_stock(); // 删除购物车 $woocommerce->购物车->empty_cart(); 别的 //回声'';

错误截图:

如果有人可以帮助我,请告诉我。

【问题讨论】:

银行API好像有问题,建议你联系他们。 【参考方案1】:

问题出在this->backURL,因为它有/,所以服务器感觉像是转到/另一个资源,所以你需要使用urlencode(this->backURL)对其进行编码

【讨论】:

以上是关于Woocommerce:当我下订单以使用银行 API 处理付款时出现运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

将默认 WooCommerce 订单状态更改为处理支票和银行付款

WooCommerce 更改订单状态 BACS 处理

WooCommerce 根据用户角色更改 BACS 订单状态

在 WooCommerce 中,将 BACS“暂停”订单限制为客户的一个

在 Woocommerce 3+ 中使用订单项以编程方式创建订单

更改 Woocommerce 结帐端点以显示订单摘要详细信息