成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

php接收微信xml數(shù)據(jù) php讀取xml接口數(shù)據(jù)

PHP怎么解析微信支付結(jié)果返回的xml

php解析xml報(bào)文的方法是DOMDocument:

目前創(chuàng)新互聯(lián)公司已為成百上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、甘德網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

解析方法如下:

$xmlstring = XML

?xml version='1.0'?

document

cmd attr='default'login/cmd

loginimdonkey/login

/document

XML;

$dom = new DOMDocument();

$dom-loadXML($xmlstring);

print_r(getArray($dom-documentElement));

function getArray($node) {

$array = false;

if ($node-hasAttributes()) {

foreach ($node-attributes as $attr) {

$array[$attr-nodeName] = $attr-nodeValue;

}

}

if ($node-hasChildNodes()) {

if ($node-childNodes-length == 1) {

$array[$node-firstChild-nodeName] = getArray($node-firstChild);

} else {

foreach ($node-childNodes as $childNode) {

if ($childNode-nodeType != XML_TEXT_NODE) {

$array[$childNode-nodeName][] = getArray($childNode);

}

}

}

} else {

return $node-nodeValue;

}

return $array;

}

如何利用PHP實(shí)現(xiàn) APP端微信支付功能

一丶?PHP后臺(tái)后臺(tái)生成預(yù)支付交易單,返回正確的預(yù)支付交易回話標(biāo)識(shí)后再在APP里面調(diào)起支付!官方文檔:

根據(jù)文檔拼接微信需要的參數(shù),這里需要幾個(gè)方法,直接上代碼!

傳輸給微信的參數(shù)要組裝成xml格式發(fā)送,傳如參數(shù)數(shù)組!

public?function?ToXml($data=array())

{

if(!is_array($data)?||?count($data)?=?0)

{

return?'數(shù)組異常';

}

$xml?=?"";

foreach?($data?as?$key=$val)

{

if?(is_numeric($val)){

$xml.="".$key."".$val."";

}else{

$xml.="".$key."";

}

}

$xml.="";

return?$xml;

}

2.生成隨機(jī)字符串,微信所需參數(shù)!?這里方法很多,看自己愛好都行!

function?rand_code(){

$str?=?'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';//62個(gè)字符

$str?=?str_shuffle($str);

$str?=?substr($str,0,32);

return??$str;

}

3.這里是微信比較重要的一步了,這個(gè)方法會(huì)多次用到!生成簽名

private?function?getSign($params)?{

ksort($params);????????//將參數(shù)數(shù)組按照參數(shù)名ASCII碼從小到大排序

foreach?($params?as?$key?=?$item)?{

if?(!empty($item))?{?????????//剔除參數(shù)值為空的參數(shù)

$newArr[]?=?$key.'='.$item;?????//?整合新的參數(shù)數(shù)組

}

}

$stringA?=?implode("",?$newArr);?????????//使用??符號(hào)連接參數(shù)

$stringSignTemp?=?$stringA."key="."************************";????????//拼接key

//?key是在商戶平臺(tái)API安全里自己設(shè)置的

$stringSignTemp?=?MD5($stringSignTemp);???????//將字符串進(jìn)行MD5加密

$sign?=?strtoupper($stringSignTemp);??????//將所有字符轉(zhuǎn)換為大寫

return?$sign;

}

4.傳遞參數(shù)給微信,生成預(yù)支付訂單!?接收微信返回的數(shù)據(jù),在反給APP端,APP端調(diào)用支付接口,完成支付?!?APP端所需參數(shù)見微信文檔:;index=2

public?function?wx_pay()?{

$nonce_str?=?$this-rand_code();????????//調(diào)用隨機(jī)字符串生成方法獲取隨機(jī)字符串

$data['appid']?='wxdbc5dc*******';???//appid

$data['mch_id']?=?'1493*****'?;????????//商戶號(hào)

$data['body']?=?"APP支付測(cè)試";

$data['spbill_create_ip']?=?$_SERVER['HTTP_HOST'];???//ip地址

$data['total_fee']?=?1;?????????????????????????//金額

$data['out_trade_no']?=?time().mt_rand(10000,99999);????//商戶訂單號(hào),不能重復(fù)

$data['nonce_str']?=?$nonce_str;???????????????????//隨機(jī)字符串

$data['notify_url']?=?'';?接收支付后的通知,必須為能直接訪問的網(wǎng)址,不能跟參數(shù)

$data['trade_type']?=?'APP';??????//支付方式

//將參與簽名的數(shù)據(jù)保存到數(shù)組??注意:以上幾個(gè)參數(shù)是追加到$data中的,$data中應(yīng)該同時(shí)包含開發(fā)文檔中要求必填的剔除sign以外的所有數(shù)據(jù)

$data['sign']?=?$this-getSign($data);????????//獲取簽名

$xml?=?$this-ToXml($data);????????????//數(shù)組轉(zhuǎn)xml

//curl?傳遞給微信方

$url?=?"";

//header("Content-type:text/xml");

$ch?=?curl_init();

curl_setopt($ch,CURLOPT_URL,?$url);

if(stripos($url,"https://")!==FALSE){

curl_setopt($ch,?CURLOPT_SSLVERSION,?CURL_SSLVERSION_TLSv1);

curl_setopt($ch,?CURLOPT_SSL_VERIFYPEER,?FALSE);

curl_setopt($ch,?CURLOPT_SSL_VERIFYHOST,?FALSE);

}????else????{

curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,TRUE);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//嚴(yán)格校驗(yàn)

}

//設(shè)置header

curl_setopt($ch,?CURLOPT_SSLVERSION,?CURL_SSLVERSION_TLSv1);

curl_setopt($ch,?CURLOPT_HEADER,?FALSE);

//要求結(jié)果為字符串且輸出到屏幕上

curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?TRUE);

//設(shè)置超時(shí)

curl_setopt($ch,?CURLOPT_TIMEOUT,?30);

curl_setopt($ch,?CURLOPT_POST,?TRUE);

//傳輸文件

curl_setopt($ch,?CURLOPT_POSTFIELDS,?$xml);

//運(yùn)行curl

$data?=?curl_exec($ch);

//返回結(jié)果

if($data){

curl_close($ch);

//返回成功,將xml數(shù)據(jù)轉(zhuǎn)換為數(shù)組.

$re?=?$this-FromXml($data);

if($re['return_code']?!=?'SUCCESS'){

json("201",'簽名失敗');

}

else{

//接收微信返回的數(shù)據(jù),傳給APP!

$arr?=array(

'prepayid'?=$re['prepay_id'],

'appid'?=?'wxdbc5dc*****',

'partnerid'?=?'14937****',

'package'?=?'Sign=WXPay',

'noncestr'?=?$nonce_str,

'timestamp'?=time(),

);

//第二次生成簽名

$sign?=?$this-getSign($arr);

$arr['sign']?=?$sign;

json('200','簽名成功',$arr);

}

}?else?{

$error?=?curl_errno($ch);

curl_close($ch);

json('201',"curl出錯(cuò),錯(cuò)誤碼:$error");

}

}

5.將xml數(shù)據(jù)轉(zhuǎn)換為數(shù)組,接收微信返回?cái)?shù)據(jù)時(shí)用到.

public?function?FromXml($xml)

{

if(!$xml){

echo?"xml數(shù)據(jù)異常!";

}

//將XML轉(zhuǎn)為array

//禁止引用外部xml實(shí)體

libxml_disable_entity_loader(true);

$data?=?json_decode(json_encode(simplexml_load_string($xml,?'SimpleXMLElement',?LIBXML_NOCDATA)),?true);

return?$data;

}

二?.APP支付成功后,會(huì)調(diào)用你填寫的回調(diào)地址?.?返回參數(shù)詳見微信文檔:;index=3

//?微信支付回調(diào)

function?wx_notify(){

//接收微信返回的數(shù)據(jù)數(shù)據(jù),返回的xml格式

$xmlData?=?file_get_contents('php://input');

//將xml格式轉(zhuǎn)換為數(shù)組

$data?=?$this-FromXml($xmlData);

//用日志記錄檢查數(shù)據(jù)是否接受成功,驗(yàn)證成功一次之后,可刪除。

$file?=?fopen('./log.txt',?'a+');

fwrite($file,var_export($data,true));

//為了防止假數(shù)據(jù),驗(yàn)證簽名是否和返回的一樣。

//記錄一下,返回回來的簽名,生成簽名的時(shí)候,必須剔除sign字段。

$sign?=?$data['sign'];

unset($data['sign']);

if($sign?==?$this-getSign($data)){

//簽名驗(yàn)證成功后,判斷返回微信返回的

if?($data['result_code']?==?'SUCCESS')?{

//根據(jù)返回的訂單號(hào)做業(yè)務(wù)邏輯

$arr?=?array(

'pay_status'?=?1,

);

$re?=?M('order')-where(['order_sn'=$data['out_trade_no']])-save($arr);

//處理完成之后,告訴微信成功結(jié)果!

if($re){

echo?'';exit();

}

}

//支付失敗,輸出錯(cuò)誤信息

else{

$file?=?fopen('./log.txt',?'a+');

fwrite($file,"錯(cuò)誤信息:".$data['return_msg'].date("Y-m-d?H:i:s"),time()."\r\n");????

}

}

else{

$file?=?fopen('./log.txt',?'a+');

fwrite($file,"錯(cuò)誤信息:簽名驗(yàn)證失敗".date("Y-m-d?H:i:s"),time()."\r\n");????

}

}

在這里,微信APP支付流程就成功走完了!謝謝支持!

---------------------

PHP接收并解析微信支付結(jié)果通知~呢?

$data?=?file_get_contents("php://input");

$result_xml?=?xml_parser_create();

xml_parse_into_struct($result_xml,?$data,?$vals,?$index);

xml_parser_free($result_xml);

foreach(?$vals?as?$k)

{

if(strtolower($k['tag'])!='xml')$result_array[strtolower($k['tag'])]?=?$k['value'];

}

//$result_array?就是通知xml數(shù)據(jù)轉(zhuǎn)換來的數(shù)組,接下來就簡(jiǎn)單了,

//需要哪個(gè)數(shù)據(jù)就去$result_array數(shù)組里面找,然后根據(jù)字段值進(jìn)行具體的處理。

分享標(biāo)題:php接收微信xml數(shù)據(jù) php讀取xml接口數(shù)據(jù)
文章出自:http://jinyejixie.com/article38/ddichpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、定制開發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
德保县| 葵青区| 紫阳县| 连山| 六枝特区| 抚远县| 平远县| 津市市| 攀枝花市| 尖扎县| 宜宾市| 陕西省| 衡山县| 安阳县| 松阳县| 镇坪县| 郎溪县| 神木县| 邳州市| 荣昌县| 岱山县| 康乐县| 霍林郭勒市| 介休市| 龙岩市| 浠水县| 彭州市| 红河县| 佛教| 五寨县| 象山县| 信阳市| 望城县| 宜黄县| 丰县| 永嘉县| 娱乐| 神木县| 新津县| 桦甸市| 佛坪县|