V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ranran
V2EX  ›  问与答

请问阿里大鱼的这个 PHP 的 API 如何判断提交结果是否成功?

  •  
  •   ranran · 2016-08-08 15:51:28 +08:00 · 7405 次点击
    这是一个创建于 3027 天前的主题,其中的信息可能已经有所发展或是发生改变。

    [使用方法]

    <?php
    $c = new TopClient;
    $c->appkey = $appkey;
    $c->secretKey = $secret;
    $req = new AlibabaAliqinFcSmsNumSendRequest;
    $req->setSmsType("normal");
    $req->setSmsFreeSignName("签名");
    $req->setSmsParam("{\"datetime\":\"明天\"}");
    $req->setRecNum("18012345678");
    $req->setSmsTemplateCode("SMS_9526");
    $resp = $c->execute($req);
    

    [执行完成后会获得一个$resp ,我看了一下结构,这是发送失败的结构]

    object(ResultSet)#3 (2) {
      ["code"]=>
      int(40)
      ["msg"]=>
      string(53) "client-check-error:Missing Required Arguments: recNum"
    }
    
    
    ResultSet::__set_state(array(
       'code' => 40,
       'msg' => 'client-check-error:Missing Required Arguments: recNum',
    ))
    

    [这是发送成功的结构]

    object(SimpleXMLElement)#4 (2) {
      ["result"]=>
      object(SimpleXMLElement)#3 (2) {
        ["model"]=>
        string(14) "102419407248^0"
        ["success"]=>
        string(4) "true"
      }
      ["request_id"]=>
      string(12) "ztb6uv314i0z"
    }
    
    SimpleXMLElement::__set_state(array(
       'result' => 
      SimpleXMLElement::__set_state(array(
         'model' => '102419407248^0',
         'success' => 'true',
      )),
       'request_id' => 'ztb6uv314i0z',
    ))
    

    [已知的情况是,使用$resp->msg 可以获取失败的信息,通过$resp->result->success 可以获得提交成功的状态]

    [问题出来了,如何写判断来确定短信是发送成功了还是失败了,失败了要获得失败原因$resp->msg ,因为状态变量不统一,直接用上面两个其中一个获取状态,代码报错……因为存在$resp->msg 的时候不存在$resp->result->success ,反之亦然。不能作为判断方法] 以下是网上找的判断方法,实测如果返回错误信息, PHP 会报错。

        if($resp->result->success) // 如果$resp->result->success节点不存在,PHP会直接报错
        {
            return true;
        }
        else
        {
            return false;
        }
    

    [由于对于 PHP 还不大熟悉,所以想请教下如何处理此类情况(使用用判断变量类型的方式判断不存在的节点,也报错)]

    5 条回复    2016-08-08 16:10:39 +08:00
    shiny
        1
    shiny  
       2016-08-08 15:56:48 +08:00   ❤️ 1
    我是自己写的阿里大鱼接口调用程序,几十行代码而已。
    ranran
        2
    ranran  
    OP
       2016-08-08 15:58:14 +08:00
    @shiny 搞不懂为什么他这个 SDK 成功和失败竟然是返回两种结构……
    shiny
        3
    shiny  
       2016-08-08 16:04:26 +08:00   ❤️ 1
    @ranran https://api.alidayu.com/doc2/apiDetail?spm=a3142.7791109.1999204071.19.HnaLhS&apiId=25450
    1 、调用时候可以选择 simplify=true 来简化返回的结构
    2 、如果有 error_response 就是失败了;然后就是判断 result 里的 success 或 err_code 了。
    shiny
        4
    shiny  
       2016-08-08 16:05:46 +08:00   ❤️ 1
    可以用 isset 来判断,不会报错
    ranran
        5
    ranran  
    OP
       2016-08-08 16:10:39 +08:00
    @shiny 谢谢!果然可以。有官方的了就懒得自己写了。避免踩坑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1778 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:36 · PVG 00:36 · LAX 08:36 · JFK 11:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.