Java vs PHP 在Http请求的跨语言的Array url拼接

如何用java实现对接PHP服务的接口调用?

情况是这样的,自己是java开发者,有对接php项目服务的接口请求场景。本来也就是个http接口对接,但问题来了,熟悉java数据结构的看到接口文档中php参数结构,会懵圈了?

根据文档若用php实现参数的设置:

$param = ['code'=>'543689'];

function sender($mobile, $tplCode,$param, $sign){

    $data = [
        'mobiles'      => $mobile,
        'tpl_code'     => $tplCode,
        'tpl_params'   => $param,
        'sign_name'    => $sign,
    ];

    $time  = time();
    $token = md5($time .15565422 .'接口秘钥');

    $comData = ['time' => $time, 'user_id' => $userId, 'token' => $token];

    $postData = array_merge($comData, $data);

    $url = 'https://www.8a.hk/api/sms/sendByTplCode';
    return sendPost($url, $postData);
}

想要用java实现,就需要知道 tpl_params参数值在http请求中PHP是怎么拼接的,所以通过在线的PHP执行测试,得到了下面日志:

Array
(
    [time] => 1623910775
    [user_id] => 15565422 
    [token] => 5c2070ec5205872d7ea5d94638f7e7d6
    [mobiles] => 13888888888
    [tpl_code] => SMS_2001023565
    [tpl_params] => Array
        (
            [code] => 543689
        )

    [sign_name] => 短信签名
)


time=1623910775&user_id=15565422&token=5c2070ec5205872d7ea5d94638f7e7d6&mobiles=13888888888&tpl_code=SMS_2001023565&tpl_params%5Bcode%5D=543689&sign_name=%E7%9F%AD%E4%BF%A1%E7%AD%BE%E5%90%8D

我们URLdecode下url拼接形式,就获取到了 tpl_params[code]=543689 ,这不是任何一种java数据结构toString字符串输出。最好直接拼接解决这种跨语言数据结构的Http请求问题。

 

附件,提供下php版接口实现示例如下:

<?php
/**公共参数
* @param $userId 会员ID
* @param $secret 接口秘钥
*
* @return array
*/
function getCommonData($userId, $secret){
    $time  = time();
    $token = md5($time . $userId . $secret);

    return ['time' => $time, 'user_id' => $userId, 'token' => $token];
}

/**发送请求
* @param      $url 接口地址
* @param      $params 请求参数 数组
* @param null $header
*
* @return bool|mixed
*/
function sendPost($url, $params, $header = null){
    if (empty($url)) {
        return false;
    }

    // 判断是否是字符串
    if (!is_string($params)) {
        $params = http_build_query($params);
        print_r($params);
    }

    $length   = strlen($params);
    $header[] = 'Content-Length: ' . $length;

    $options = [
        CURLOPT_URL            => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => $header,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $params,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_TIMEOUT        => 20, // 过期时间
    ];

    $ch     = curl_init();
    $setRes = curl_setopt_array($ch, $options);

    if (!$setRes) {
        $error = 'curl error ' . curl_errno($ch) . ': ' . curl_error($ch);
        trigger_error($error);
    }

    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

/**发送短信
* @param $mobile  手机号码,多个英文逗号隔开
* @param $tplCode 模板编号
* @param $param   参数 数组
* @param $type    短信类型 1:验证码 2:短信通知 3:营销短信
*
* @return mixed
*/
function sender($mobile, $tplCode,$param, $sign)
{

    $data = [
        'mobiles'      => $mobile,
        'tpl_code'     => $tplCode,
        'tpl_params'   => $param,
        'sign_name'    => $sign,
    ];

    $postData = array_merge(getCommonData(15565422, '接口秘钥'), $data);
    print_r($postData);

    $url = 'https://www.8a.hk/api/sms/sendByTplCode';
    return sendPost($url, $postData);
}


$param = ['code'=>'543689'];
$result = sender('13888888888', 'SMS_2001023565', $param, '短信签名');//发送短信
?>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远ai不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值