function prepareMobileTradeData($params)
{
// 不要用 SimpleXML 来构建 xml 结构,因为有第一行文档申明支付宝验证不通过
$xml_str = '<direct_trade_create_req>' . '<notify_url>' . $this->config['notify_url'] . '</notify_url>' . '<call_back_url>' . $this->config['return_url'] . '</call_back_url>' . '<seller_account_name>' . $this->config['seller_email'] . '</seller_account_name>' . '<out_trade_no>' . $params['out_trade_no'] . '</out_trade_no>' . '<subject>' . htmlspecialchars($params['subject'], ENT_XML1, 'UTF-8') . '</subject>' . '<total_fee>' . $params['total_fee'] . '</total_fee>' . '<merchant_url>' . $params['merchant_url'] . '</merchant_url>' . (isset($params['it_b_pay']) ? '<pay_expire>' . $params['it_b_pay'] . '</pay_expire>' : '') . '</direct_trade_create_req>';
$request_data = $this->buildSignedParameters(array('service' => $this->service, 'partner' => $this->config['partner'], 'sec_id' => $this->config['sign_type'], 'format' => 'xml', 'v' => '2.0', 'req_id' => $params['req_id'], 'req_data' => $xml_str));
$url = $this->gateway;
$input_charset = trim(strtolower($this->config['input_charset']));
if (trim($input_charset) != '') {
$url = $url . "_input_charset=" . $input_charset;
}
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
//SSL证书认证
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
//严格认证
curl_setopt($curl, CURLOPT_CAINFO, $this->config['cacert']);
//证书地址
curl_setopt($curl, CURLOPT_HEADER, 0);
// 过滤HTTP头
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// 显示输出结果
curl_setopt($curl, CURLOPT_POST, true);
// post传输数据
curl_setopt($curl, CURLOPT_POSTFIELDS, $request_data);
// post传输数据
$responseText = curl_exec($curl);
//var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容
curl_close($curl);
if (empty($responseText)) {
return NULL;
}
parse_str($responseText, $responseData);
if (empty($responseData['res_data'])) {
return NULL;
}
if ($this->config['sign_type'] == '0001') {
$responseData['res_data'] = $this->rsaDecrypt($responseData['res_data'], $this->config['private_key_path']);
}
//token从res_data中解析出来(也就是说res_data中已经包含token的内容)
$doc = new \DOMDocument();
$doc->loadXML($responseData['res_data']);
$responseData['request_token'] = $doc->getElementsByTagName("request_token")->item(0)->nodeValue;
$xml_str = '<auth_and_execute_req>' . '<request_token>' . $responseData['request_token'] . '</request_token>' . '</auth_and_execute_req>';
return array('service' => self::SERVICE_WAP_AUTH, 'partner' => $this->config['partner'], 'sec_id' => $this->config['sign_type'], 'format' => 'xml', 'v' => '2.0', 'req_data' => $xml_str);
}