如何将PHP动态变量传入Postman生成的URL编码请求参数
问题解决及代码修正
核心问题分析
- 单引号不解析变量:PHP中用单引号包裹的字符串不会解析内部变量,所以原代码里
'...$Recieving_mobile...'中的变量不会被替换为实际值。 - 手动URL编码易出错:直接手动拼接URL编码的JSON字符串,不仅变量无法替换,还容易出现格式错误导致API无法识别。
- 未利用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
相关产品推荐
相关产品推荐

