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

如何将PHP动态变量传入Postman生成的URL编码请求参数

问题解决及代码修正

核心问题分析

  1. 单引号不解析变量:PHP中用单引号包裹的字符串不会解析内部变量,所以原代码里'...$Recieving_mobile...'中的变量不会被替换为实际值。
  2. 手动URL编码易出错:直接手动拼接URL编码的JSON字符串,不仅变量无法替换,还容易出现格式错误导致API无法识别。
  3. 未利用WordPress钩子参数:hrw_withdrawal_request_notification钩子通常会传递提款请求相关参数,可直接从中获取动态金额和用户信息,无需硬编码测试值。

修正后的代码

// WordPress hook 调用API开始
add_action('hrw_withdrawal_request_notification', 'disburse_airtime', 7, 1); // 调整参数接收数量,匹配钩子实际传参
function disburse_airtime($withdrawal_request) {
    // 1. 从WordPress提款请求中获取动态参数(需根据实际业务逻辑调整字段名)
    // 提取金额并转换为API要求的格式(示例:KES + 金额数值)
    $Airtime_amount = 'KES ' . $withdrawal_request->amount;
    // 从提款请求中获取用户ID
    $user_id = $withdrawal_request->user_id;
    // 从用户元数据中读取手机号(假设手机号存储在user_meta的'mobile_phone'字段)
    $Recieving_mobile = get_user_meta($user_id, 'mobile_phone', true);

    // 2. 构建符合API要求的recipients JSON结构
    $recipients = [
        [
            'phoneNumber' => $Recieving_mobile,
            'amount' => $Airtime_amount
        ]
    ];
    $recipients_json = json_encode($recipients);

    // 3. 构建POST字段数组,用http_build_query自动生成URL编码字符串
    $post_fields = [
        'username' => 'sandbox',
        'recipients' => $recipients_json
    ];
    $post_data = http_build_query($post_fields);

    // 4. 初始化并执行CURL请求
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://api.sandbox.africastalking.com/version1/airtime/send',
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS => $post_data, // 使用自动编码的请求体
        CURLOPT_HTTPHEADER => array(
            'Content-Type: application/x-www-form-urlencoded',
            'apiKey: 61449ca078574078a6d0eaaa01cfb751f803797c99714f74d8541a25e2a612ef',
            'Accept: application/json'
        ),
    ));

    $response = curl_exec($curl);
    curl_close($curl);
    
    // 生产环境建议记录日志而非直接输出
    error_log('Airtime disbursement response: ' . $response);
}

关键说明

  • 钩子参数接收:修改add_action的第四个参数为1,确保能接收钩子传递的提款请求对象,具体参数数量需根据hrw_withdrawal_request_notification的实际定义调整。
  • 动态参数获取:get_user_meta用于从WordPress用户元数据中提取手机号,需确保用户注册流程中已保存该字段,字段名要和实际业务一致。
  • 自动编码处理:http_build_query自动将数组转为符合x-www-form-urlencoded格式的字符串,json_encode正确生成recipients的JSON结构,避免手动编码的错误。
  • 变量替换:通过数组和函数处理逻辑,彻底解决单引号字符串无法解析变量的问题,确保动态值正确传入请求体。

内容的提问来源于stack exchange,提问作者George Obonyo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:40:21