You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress IONOS站点的GiveWP中添加Payasso支付方式?

在GiveWP中添加Payasso支付方式的解决方案

由于GiveWP默认未集成Payasso支付通道,你可以通过以下两种方式实现添加:

方法一:查找官方/第三方集成插件

  • 登录Payasso商家后台或开发者平台,确认是否有针对GiveWP的专属扩展插件。官方集成的兼容性和稳定性最优,若存在,直接安装激活后,在GiveWP支付设置中即可启用Payasso。

方法二:自定义开发Payasso支付网关(适合具备开发能力的场景)

如果没有现成的集成插件,可通过GiveWP的网关扩展API自定义开发,步骤如下:

  1. 创建自定义插件(推荐,避免主题更新丢失代码)
    在WordPress的wp-content/plugins/目录下新建文件夹give-payasso-gateway,并创建give-payasso-gateway.php文件作为插件主文件。

  2. 注册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' ) );
        }
    }
    
  3. 配置插件与Payasso后台

    • 激活自定义插件后,进入WordPress后台的「捐赠」→「设置」→「支付网关」,找到Payasso并启用,填入从Payasso获取的API密钥和密钥。
    • 在Payasso商家后台设置webhook回调URL为:你的网站域名/?payasso-webhook=1,确保服务器允许接收外部POST请求。
  4. 测试支付流程
    使用Payasso的沙箱环境进行测试,创建测试捐赠,验证跳转、支付状态更新是否正常。

注意事项

  • 所有API端点、参数和签名逻辑必须严格遵循Payasso官方文档,上述代码仅为框架示例。
  • 若无开发能力,可联系Payasso技术支持询问GiveWP集成计划,或委托WordPress开发者定制。

内容的提问来源于stack exchange,提问作者Lyna DJELMOUDI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:53:17