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

基于SOAP请求返回JSON值的邮件发送及PHP数据提取问题

提取SOAP响应字段并用于邮件发送

看起来你已经搞定了SOAP请求和XML转关联数组的核心流程,接下来要提取$output里的DemoUName、DemoPass等值其实非常简单,直接通过数组键名就能访问,下面一步步给你说明:

1. 直接提取目标字段

你的$output是一个标准的关联数组,所以可以直接通过键名获取对应的值。为了避免某个字段不存在时触发报错,建议用null合并运算符给个默认值兜底:

// 提取需要的字段,字段不存在时返回默认值
$demoUName = $output['DemoUName'] ?? '未获取到用户名';
$demoPass = $output['DemoPass'] ?? '未获取到密码';
$futAcct = $output['FutAcct'] ?? '未获取到期货账户';
$resultMsg = $output['Result'] ?? '无系统返回信息';

如果习惯用传统方式,也可以用isset()判断:

$demoUName = isset($output['DemoUName']) ? $output['DemoUName'] : '未获取到用户名';

2. 整合到邮件发送逻辑

拿到这些字段后,就可以直接嵌入到邮件内容里了。下面用PHP原生的mail()函数举个例子(如果用PHPMailer等第三方库,逻辑是一样的,只是调用方式不同):

// 邮件配置
$to = '收件人邮箱@example.com';
$subject = '新Demo用户创建成功通知';
// 邮件内容,用提取到的变量填充
$message = <<<EOT
您好,新Demo用户已创建完成,详情如下:
- 用户名:$demoUName
- 密码:$demoPass
- 期货账户:$futAcct
- 系统返回信息:$resultMsg
EOT;
$headers = 'From: 系统通知@yourdomain.com' . "\r\n" .
           'Reply-To: 系统通知@yourdomain.com' . "\r\n";

// 发送邮件
if(mail($to, $subject, $message, $headers)){
    echo '用户信息生成成功,通知邮件已发送';
} else {
    echo '用户信息生成成功,但邮件发送失败';
}

3. 完整代码整合

把上面的逻辑加到你原有的代码里,完整版本如下:

$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url2 );
curl_setopt($soap_do, CURLOPT_HEADER, false);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 100);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 100);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($soap_do);

if ($result === false) {
    $err = 'Curl error: ' . curl_errno($soap_do);
    print $err;
} else {
    $xml = simplexml_load_string($result);
    $body = $xml->xpath("//soapenv:Body//demosetupReturn")[0];
    $output = [];
    foreach ( $body as $item) {
        $output[(string)$item->key] = (string)$item->value;
    }

    // 提取目标字段
    $demoUName = $output['DemoUName'] ?? '未获取到用户名';
    $demoPass = $output['DemoPass'] ?? '未获取到密码';
    $futAcct = $output['FutAcct'] ?? '未获取到期货账户';
    $resultMsg = $output['Result'] ?? '无系统返回信息';

    // 发送通知邮件
    $to = 'recipient@example.com';
    $subject = '新Demo用户创建成功';
    $message = "新用户创建详情:\n";
    $message .= "用户名:$demoUName\n";
    $message .= "密码:$demoPass\n";
    $message .= "期货账户:$futAcct\n";
    $message .= "系统返回信息:$resultMsg\n";
    
    $headers = 'From: noreply@yourdomain.com' . "\r\n";
    
    if(mail($to, $subject, $message, $headers)){
        echo '操作完成,邮件已发送';
    } else {
        echo '用户信息已生成,但邮件发送失败';
    }

    // 如果仍需要输出JSON给前端,保留此行
    // echo json_encode($output);
}
curl_close($soap_do);

额外提醒

  • 生产环境中建议开启CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST,关闭这两个选项会带来SSL安全风险。
  • 如果邮件发送需求复杂(比如HTML邮件、附件),推荐使用PHPMailer或SwiftMailer这类成熟的邮件库,比原生mail()更稳定灵活。

内容的提问来源于stack exchange,提问作者Dirty Bird Design

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:01:25