php实现浦发银企直连查询余额


    最近在对接浦发银行的银企直连业务,因郑州总行技术给的文档不完整,导致踩坑踩了N久才得以解决。

    php实现浦发银企直连查询余额。

    本案例是查询账户“952A9997220008092”的余额

    案例代码如下

$data = '952A9997220008092';
$xml = curlPost($data,"127.0.0.1:4437","INFOSEC_SIGN/1.0");
$need = getNeedBetween($xml, '', '');
$xml = '44021110510238720000407522019/11/05 16:13:02' . $need . '';
$len = str_pad(6 + strlen($xml), 6, "0", STR_PAD_LEFT);
$xml=$len.$xml;
$res=curlPost($xml,"127.0.0.1:5777","text/plain");

$sign = getNeedBetween($res, 'ature>', '');
$info=curlPost($sign,"47.104.171.19:4437","INFOSEC_VERIFY_SIGN/1.0");
$info=getNeedBetween($info, '');
var_dump(xmlToArray(""));exit;

function curlPost($data,$url,$type)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: '.$type));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    return $output;
    curl_close($ch);
}

function getNeedBetween($kw1, $mark1, $mark2)
{
    $kw = $kw1;
    $st = stripos($kw, $mark1);
    $ed = stripos($kw, $mark2);
    if (($st == false || $ed == false) || $st >= $ed)
        return 0;
    $kw = substr($kw, ($st + 6), ($ed - $st - 6));
    return $kw;
}

function xmlToArray($xml)
{
    libxml_disable_entity_loader(true);
    $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
    return $values;
}



评论


乖,登录后才可以留言!