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

2016-08-08 15:51:28 +08:00
 ranran

[使用方法]

<?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 还不大熟悉,所以想请教下如何处理此类情况(使用用判断变量类型的方式判断不存在的节点,也报错)]

7255 次点击
所在节点    问与答
5 条回复
shiny
2016-08-08 15:56:48 +08:00
我是自己写的阿里大鱼接口调用程序,几十行代码而已。
ranran
2016-08-08 15:58:14 +08:00
@shiny 搞不懂为什么他这个 SDK 成功和失败竟然是返回两种结构……
shiny
2016-08-08 16:04:26 +08:00
@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
2016-08-08 16:05:46 +08:00
可以用 isset 来判断,不会报错
ranran
2016-08-08 16:10:39 +08:00
@shiny 谢谢!果然可以。有官方的了就懒得自己写了。避免踩坑。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/297900

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX