如何在WordPress IONOS站点的GiveWP中添加Payasso支付方式?
在GiveWP中添加Payasso支付方式的解决方案
由于GiveWP默认未集成Payasso支付通道,你可以通过以下两种方式实现添加:
方法一:查找官方/第三方集成插件
- 登录Payasso商家后台或开发者平台,确认是否有针对GiveWP的专属扩展插件。官方集成的兼容性和稳定性最优,若存在,直接安装激活后,在GiveWP支付设置中即可启用Payasso。
方法二:自定义开发Payasso支付网关(适合具备开发能力的场景)
如果没有现成的集成插件,可通过GiveWP的网关扩展API自定义开发,步骤如下:
创建自定义插件(推荐,避免主题更新丢失代码)
在WordPress的wp-content/plugins/目录下新建文件夹give-payasso-gateway,并创建give-payasso-gateway.php文件作为插件主文件。注册Payasso支付网关
将以下代码添加到插件主文件中(注意根据Payasso官方API文档调整参数、端点和签名验证逻辑):<?php /* Plugin Name: GiveWP - Payasso Gateway Plugin URI: https://your-site.com/ Description: Adds Payasso as a payment gateway for GiveWP Version: 1.0 Author: Your Name */ add_action( 'give_register_gateway', 'register_payasso_gateway' ); function register_payasso_gateway() { if ( class_exists( 'Give_Payment_Gateway' ) ) { class Give_Payasso_Gateway extends Give_Payment_Gateway { public function __construct() { $this->id = 'payasso'; $this->label = __( 'Payasso', 'give' ); $this->has_fields = false; $this->supports = array( 'refunds' ); // 网关设置项 $this->settings = array( 'enabled' => array( 'type' => 'checkbox', 'label' => __( '启用Payasso', 'give' ), 'default' => 'off', ), 'title' => array( 'type' => 'text', 'label' => __( '支付方式显示标题', 'give' ), 'default' => __( '通过Payasso完成捐赠', 'give' ), ), 'api_key' => array( 'type' => 'text', 'label' => __( 'Payasso API密钥', 'give' ), 'description' => __( '从Payasso商家后台获取你的API密钥', 'give' ), ), 'api_secret' => array( 'type' => 'text', 'label' => __( 'Payasso API密钥', 'give' ), 'description' => __( '从Payasso商家后台获取你的API密钥', 'give' ), ), ); } // 处理支付发起请求 public function process_payment( $donation_id ) { $donation = new Give_Donation( $donation_id ); $amount = give_donation_amount( $donation_id ); $currency = give_get_currency(); // 构建Payasso支付请求参数 $payment_data = array( 'amount' => $amount, 'currency' => $currency, 'order_id' => $donation_id, 'notify_url' => add_query_arg( 'payasso-webhook', '1', home_url( '/' ) ), 'customer_email' => $donation->email, ); // 调用Payasso支付API $response = wp_remote_post( 'https://api.payasso.com/v1/payments', array( 'body' => wp_json_encode( $payment_data ), 'headers' => array( 'Content-Type' => 'application/json', 'Authorization' => 'Bearer ' . $this->settings['api_key'], ), 'timeout' => 30, ) ); if ( is_wp_error( $response ) ) { give_record_gateway_error( 'Payasso API错误', $response->get_error_message(), $donation_id ); return array( 'result' => 'error', 'message' => __( '无法连接到Payasso服务器,请稍后重试', 'give' ), ); } $response_body = json_decode( wp_remote_retrieve_body( $response ), true ); if ( isset( $response_body['status'] ) && $response_body['status'] === 'success' ) { $donation->update_status( 'pending' ); return array( 'result' => 'success', 'redirect' => $response_body['payment_url'], ); } else { $error_msg = isset( $response_body['message'] ) ? $response_body['message'] : '支付发起失败'; give_record_gateway_error( 'Payasso支付错误', $error_msg, $donation_id ); return array( 'result' => 'error', 'message' => __( $error_msg, 'give' ), ); } } // 处理Payasso支付回调 public function handle_webhook() { if ( ! isset( $_GET['payasso-webhook'] ) ) { return; } $payload = file_get_contents( 'php://input' ); $data = json_decode( $payload, true ); if ( ! isset( $data['order_id'], $data['payment_status'] ) ) { wp_send_json_error( '无效的回调数据', 400 ); } $donation_id = $data['order_id']; $donation = new Give_Donation( $donation_id ); // 验证Payasso签名(根据官方文档调整验证逻辑) $signature = isset( $_SERVER['HTTP_X_PAYASSO_SIGNATURE'] ) ? $_SERVER['HTTP_X_PAYASSO_SIGNATURE'] : ''; $is_valid = $this->verify_webhook_signature( $payload, $signature ); if ( ! $is_valid ) { wp_send_json_error( '签名验证失败', 403 ); } // 更新捐赠状态 switch ( $data['payment_status'] ) { case 'completed': $donation->update_status( 'publish' ); give_insert_payment_note( $donation_id, 'Payasso支付已完成' ); break; case 'failed': $donation->update_status( 'failed' ); give_insert_payment_note( $donation_id, 'Payasso支付失败' ); break; case 'refunded': $donation->update_status( 'refunded' ); give_insert_payment_note( $donation_id, 'Payasso支付已退款' ); break; } wp_send_json_success(); } // 签名验证逻辑(需匹配Payasso官方要求) private function verify_webhook_signature( $payload, $signature ) { $computed_signature = hash_hmac( 'sha256', $payload, $this->settings['api_secret'] ); return hash_equals( $computed_signature, $signature ); } } give_register_gateway( 'Give_Payasso_Gateway' ); add_action( 'init', array( 'Give_Payasso_Gateway', 'handle_webhook' ) ); } }配置插件与Payasso后台
- 激活自定义插件后,进入WordPress后台的「捐赠」→「设置」→「支付网关」,找到Payasso并启用,填入从Payasso获取的API密钥和密钥。
- 在Payasso商家后台设置webhook回调URL为:
你的网站域名/?payasso-webhook=1,确保服务器允许接收外部POST请求。
测试支付流程
使用Payasso的沙箱环境进行测试,创建测试捐赠,验证跳转、支付状态更新是否正常。
注意事项
- 所有API端点、参数和签名逻辑必须严格遵循Payasso官方文档,上述代码仅为框架示例。
- 若无开发能力,可联系Payasso技术支持询问GiveWP集成计划,或委托WordPress开发者定制。
内容的提问来源于stack exchange,提问作者Lyna DJELMOUDI
相关产品推荐
相关产品推荐

