導航:首頁 > 編程語言 > 微信支付php代碼

微信支付php代碼

發布時間:2022-07-20 04:58:26

php實現微信掃碼支付怎麼做,微信的demo報錯咋搞

微信掃碼首先你要確定幾個步驟:
1申請了微信支付,獲得到微信支付所需要的appid和秘鑰
2有正確的回調地址,就是需要外網ip地址接收回調信息
3如果以上都滿足,剩下來的才是代碼的問題,這個時候需要考慮比如版本問題,路徑問題,配置信息問題,各個可能得問題,然後開啟php的啊錯誤信息,對報錯問題具體分析。

Ⅱ PHP怎麼解析微信支付結果返回的xml

PHP解析微信支付結果返回的xml的方法是通過自定義方法和第三方組件DomDocument實現的。
1、解析代碼如下:
<?PHP
header("Content-type:text/html; Charset=utf-8");
$url = "http://www.google.com/ig/api?weather=shenzhen";

// 載入XML內容
$content = file_get_contents($url);
$content = get_utf8_string($content);
$dom = DOMDocument::loadXML($content);
/*
此處也可使用如下所示的代碼,
$dom = new DOMDocument();
$dom->load($url);
*/

$elements = $dom->getElementsByTagName("current_conditions");
$element = $elements->item(0);
$condition = get_google_xml_data($element, "condition");
$temp_c = get_google_xml_data($element, "temp_c");
echo '天氣:', $condition, '<br />';
echo '溫度:', $temp_c, '<br />';

function get_utf8_string($content) { // 將一些字元轉化成utf8格式
$encoding = mb_detect_encoding($content, array('ASCII','UTF-8','GB2312','GBK','BIG5'));
return mb_convert_encoding($content, 'utf-8', $encoding);
}

function get_google_xml_data($element, $tagname) {
$tags = $element->getElementsByTagName($tagname); // 取得所有的$tagname
if ($items->length > 1) {
return $items;
}
$tag = $tags->item(0); // 獲取第一個以$tagname命名的標簽
if ($tag->hasAttributes()) { // 獲取data屬性
$attribute = $tag->getAttribute("data");
return $attribute;
}else {
return false;
}
}
?>
2、返回支付的xml報文:
<?xml version="1.0"?>
<xml_api_reply version="1">
<weather mole_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0" >
<forecast_information>
<city data="Shenzhen, Guangdong"/>
<postal_code data="shenzhen"/>
<latitude_e6 data=""/>
<longitude_e6 data=""/>
<forecast_date data="2009-10-05"/>
<current_date_time data="2009-10-04 05:02:00 +0000"/>
<unit_system data="US"/>
</forecast_information>
<current_conditions>
<condition data="Sunny"/>
<temp_f data="88"/>
<temp_c data="31"/>
<humidity data="Humidity: 49%"/>
<icon data="/ig/images/weather/sunny.gif"/>
<wind_condition data="Wind: mph"/>
</current_conditions>
</weather>
</xml_api_reply>
3、列印解析結果:

print $html;

Ⅲ 你好 !! PHP如何實現微信支付 求指教 新手!說清楚一點

通知機制的實現,官方只有文檔沒有demo代碼,對沒搞過的人來說,需要花大量時間來做測試。
從文檔上說的來看,微信每次通知過來的數據,結構比較復雜,是一個多段數據,除了要取出POST數據外,還要取其它的數據。
這里首先涉及到一個關於php://input與$_POST取值的問題,簡單列幾點如下:
1,Content- Type取值為application/x-www-form-urlencoded時,php會將http請求body相應數據會填入到數組$_POST,填入到$_POST數組中的數據是進行urldecode()解析的結果。(其實,除了該Content-Type,還有 multipart/form-data表示數據是表單數據,稍後我們介紹)

2,php://input數據,只要Content-Type不為 multipart/form-data(該條件限制稍後會介紹)。那麼php://input數據與http entity body部分數據是一致的。該部分相一致的數據的長度由Content-Length指定。

3,僅當Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST數據與php://input數據才是」一致」(打上引號,表示它們格式不一致,內容一致)的。其它情況,它們都不一致。

4,php://input讀取不到$_GET數據。是因為$_GET數據作為query_path寫在http請求頭部(header)的PATH欄位,而不是寫在http請求的body部分。
幫助我們了解了為什麼xml_rpc服務端讀取數據都是通過file_get_contents(『php://input', 『r')。
而不是從$_POST中讀取,正是因為xml_rpc數據規格是xml,它的Content-Type是text/xml。

5. php://input碰到了multipart/form-data,請查閱RFC1867對它的描述。multipart/form-data也表示以POST方法提交表單數據,它還伴隨了文件上傳,所以會跟application/x- www-form-urlencoded數據格式不一樣。它會以一更種更合理的,更高效的數據格式傳遞給服務端。當Content-Type為multipart/form-data的時候,即便http請求body中存在數據,php://input也為空,PHP此時,不會把數據填入php://input流。所以,可以確定: php://input不能用於讀取enctype=multipart/form-data數據。

6. 當Content-Type為application/x- www-form-urlencoded時,php://input和$_POST數據是「一致」的,為其它Content-Type的時候,php: //input和$_POST數據數據是不一致的。因為只有在Content-Type為application/x-www-form- urlencoded或者為multipart/form-data的時候,PHP才會將http請求數據包中的body相應部分數據填入$_POST全局變數中,其它情況PHP都忽略。而php://input除了在數據類型為multipart/form-data之外為空外,其它情況都可能不為空
以上轉述這么多文字的意思,就是說,得用到這兩種方式來讀取微信傳過來的數據。 ..

Ⅳ 微信支付介面php版 notify_url.php 非同步通知頁面未成功執行

  1. 回調地址不可以帶參數,只可以是 xxx.php,我做了很多項目的微信支付,一般都會回調,可能存在的問題是沒有正確驗證。

  2. 由於是微信伺服器發起的請求,所以返回你是看不到的,只能使用file_put_contents寫入文件,來一步一步測試到底在哪出了問題

Ⅳ 如何用PHP實現微信支付,求教。新手!說明詳細點

以PHP語言為例,對微信支付的開發流程進行一下說明:

1.獲取訂單信息。

2.根據訂單信息和支付相關的賬號生成sign,並且生成支付參數。

3.將支付參數信息POST到微信伺服器,獲取返回信息。

4.根據返回信息生成相應的支付代碼(微信內部)或是支付二維碼(非微信內),完成支付。

Ⅵ 微信支付 notify.php 更新訂單代碼怎麼寫

微信支付PHP開發:微信支付代碼及獲取支付成功;微信支付demo代碼;<?php;include_once("inclu;$wxPayHelper=newWxPayHel;$user_ip=$_SERVER[";$wxPayHelper->setPara;$wxPayHelper->setPara;$wxPayHe
微信支付PHP開發一:微信支付代碼及獲取支付成功數據
一、微信支付demo代碼
<?php
include_once("include/WxPayHelper.php"); //該文件 微信DEMO包中有,沒有請到官網上下載 $commonUtil = new CommonUtil();
$wxPayHelper = new WxPayHelper();
$user_ip= $_SERVER["REMOTE_ADDR"];
$wxPayHelper->setParameter("bank_type", "WX");
$wxPayHelper->setParameter("body", "微信支付測試");
$wxPayHelper->setParameter("partner", "11111111");
$wxPayHelper->setParameter("out_trade_no", $commonUtil->create_noncestr()); $wxPayHelper->setParameter("total_fee", "1");
$wxPayHelper->setParameter("fee_type", "1");
$wxPayHelper->setParameter("notify_url", "http://m.xxx.com.cn/wxpay/api.php"); $wxPayHelper->setParameter("spbill_create_ip", $user_ip);
$wxPayHelper->setParameter("input_charset", "UTF-8");
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="application/xhtml+xml;charset=UTF-8" http-equiv="Content-Type"> <meta content="no-cache,must-revalidate" http-equiv="Cache-Control">
<meta content="no-cache" http-equiv="pragma">
<meta content="0" http-equiv="expires">
<meta content="telephone=no, address=no" name="format-detection">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1,
minimum-scale=1, width=device-width, height=device-height" />
<meta name="apple-mobile-web-app-capable" content="yes" /> <!-- apple devices fullscreen --> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<title>在線支付測試</title>
</head>
<script language="javascript">
function callpay()
{
WeixinJSBridge.invoke('getBrandWCPayRequest',<?php echo
$wxPayHelper->create_biz_package(); ?>,function(res){
if(res.err_msg == "get_brand_wcpay_request:ok" ){
// 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在用戶支付成功後返回ok,但並不保證它絕對可靠。
//因此微信團隊建議,當收到ok返回時,向商戶後台詢問是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此時未收到通知,商戶後台主動調用查詢訂單介面,查詢訂單的當前狀態,並反饋給前端展示相應的界面。
document.getElementById("fu").style.display='none';
document.getElementById("successDiv").style.display='block';
}
WeixinJSBridge.log(res.err_msg);
//alert(res.err_code+res.err_desc+res.err_msg);
});
}
</script>
<body>
<div id="fu">
<button type="button" onClick="callpay()">立即在線支付</button><br><br>
</div>
<div id="successDiv" style="display:none">
<h1>支付成功</h1>
</div>
</body>
</html>
二、獲取微信支付成功訂單信息的方法
1、 支付成功通知的內容可以使用 $_GET 獲取訂單信息
2、用 $GLOBALS["HTTP_RAW_POST_DATA"] 代碼獲取
postDATA XML -------------------- <xml> <OpenId><![CDATA[111222]]></OpenId> <AppId><![CDATA[wwwwb4f85f3a797777]]></AppId> <IsSubscribe>1</IsSubscribe> <TimeStamp> 1369743511</TimeStamp> <NonceStr><![CDATA[jALldRTHAFd5Tgs5]]></NonceStr> <AppSignature><![CDATA[]]> </AppSignature> <SignMethod><![CDATA[sha1]]></ SignMethod >
</xml>
//接收微信後台發送過來的消息,該消息數據結構為XML,不是php默認的識別數據類型 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//使用simplexml_load_string() 函數將接收到的XML消息數據載入對象$postObj中。 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement',
LIBXML_NOCDATA);
$OpenId = $postObj->postObj; //可以這樣獲取XML裡面的信息
只有「notify_url」頁面沒有輸出「success」 微信後台會自動按時間進行補單。重新發送支付成功的商品訂單信息。
目前補單機制的間隔時間為:8s、10s、10s、30s、30s、60s、120s、360s、1000s。
註:開發測試時,可以在程序裡面 加入如下代碼。
用 Txt文檔保存 接收到的信息 便於調試。 相應目錄下要有 api.txt文件
$order = $_GET; //獲取訂單信息
$fp = fopen('api.txt','a+');
fwrite($fp,"\n _______GET________");
fwrite($fp,var_export($order,true));
fwrite($fp,"\n ________postObj________");
fwrite($fp,var_export($postObj,true));
fwrite($fp,'【 Now 】: '. date("Y-m-d H:i:s") ."\n");
fclose($fp);

Ⅶ 如何利用PHP實現 APP端微信支付功能

一丶PHP後台後台生成預支付交易單,返回正確的預支付交易回話標識後再在APP裡面調起支付!官方文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1

根據文檔拼接微信需要的參數,這里需要幾個方法,直接上代碼!

傳輸給微信的參數要組裝成xml格式發送,傳如參數數組!
publicfunctionToXml($data=array())

{
if(!is_array($data)||count($data)<=0)
{
return'數組異常';
}

$xml="";
foreach($dataas$key=>$val)
{
if(is_numeric($val)){
$xml.="<".$key.">".$val."";
}else{
$xml.="<".$key.">";
}
}
$xml.="";
return$xml;
}

2.生成隨機字元串,微信所需參數!這里方法很多,看自己愛好都行!

functionrand_code(){
$str='';//62個字元
$str=str_shuffle($str);
$str=substr($str,0,32);
return$str;
}

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

privatefunctiongetSign($params){
ksort($params);//將參數數組按照參數名ASCII碼從小到大排序
foreach($paramsas$key=>$item){
if(!empty($item)){//剔除參數值為空的參數
$newArr[]=$key.'='.$item;//整合新的參數數組
}
}
$stringA=implode("&",$newArr);//使用&符號連接參數
$stringSignTemp=$stringA."&key="."************************";//拼接key
//key是在商戶平台API安全里自己設置的
$stringSignTemp=MD5($stringSignTemp);//將字元串進行MD5加密
$sign=strtoupper($stringSignTemp);//將所有字元轉換為大寫
return$sign;
}

4.傳遞參數給微信,生成預支付訂單!接收微信返回的數據,在反給APP端,APP端調用支付介面,完成支付!APP端所需參數見微信文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12&index=2

publicfunctionwx_pay(){

$nonce_str=$this->rand_code();//調用隨機字元串生成方法獲取隨機字元串
$data['appid']='wxdbc5dc*******';//appid
$data['mch_id']='1493*****';//商戶號
$data['body']="APP支付測試";
$data['spbill_create_ip']=$_SERVER['HTTP_HOST'];//ip地址
$data['total_fee']=1;//金額
$data['out_trade_no']=time().mt_rand(10000,99999);//商戶訂單號,不能重復
$data['nonce_str']=$nonce_str;//隨機字元串
$data['notify_url']='https://www.5wx.org/';接收支付後的通知,必須為能直接訪問的網址,不能跟參數
$data['trade_type']='APP';//支付方式
//將參與簽名的數據保存到數組注意:以上幾個參數是追加到$data中的,$data中應該同時包含開發文檔中要求必填的剔除sign以外的所有數據
$data['sign']=$this->getSign($data);//獲取簽名
$xml=$this->ToXml($data);//數組轉xml
//curl傳遞給微信方
$url="https://api.mch.weixin.qq.com/pay/unifiedorder";
//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);//嚴格校驗
}
//設置header
curl_setopt($ch,CURLOPT_SSLVERSION,CURL_SSLVERSION_TLSv1);
curl_setopt($ch,CURLOPT_HEADER,FALSE);
//要求結果為字元串且輸出到屏幕上
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
//設置超時
curl_setopt($ch,CURLOPT_TIMEOUT,30);
curl_setopt($ch,CURLOPT_POST,TRUE);
//傳輸文件
curl_setopt($ch,CURLOPT_POSTFIELDS,$xml);
//運行curl
$data=curl_exec($ch);
//返回結果
if($data){
curl_close($ch);
//返回成功,將xml數據轉換為數組.
$re=$this->FromXml($data);
if($re['return_code']!='SUCCESS'){
json("201",'簽名失敗');
}
else{
//接收微信返回的數據,傳給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出錯,錯誤碼:$error");
}
}

5.將xml數據轉換為數組,接收微信返回數據時用到.

publicfunctionFromXml($xml)
{
if(!$xml){
echo"xml數據異常!";
}
//將XML轉為array
//禁止引用外部xml實體
libxml_disable_entity_loader(true);
$data=json_decode(json_encode(simplexml_load_string($xml,'SimpleXMLElement',LIBXML_NOCDATA)),true);
return$data;
}

二.APP支付成功後,會調用你填寫的回調地址.返回參數詳見微信文檔:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3

//微信支付回調
functionwx_notify(){
//接收微信返回的數據數據,返回的xml格式
$xmlData=file_get_contents('php://input');
//將xml格式轉換為數組
$data=$this->FromXml($xmlData);
//用日誌記錄檢查數據是否接受成功,驗證成功一次之後,可刪除。
$file=fopen('./log.txt','a+');
fwrite($file,var_export($data,true));
//為了防止假數據,驗證簽名是否和返回的一樣。
//記錄一下,返回回來的簽名,生成簽名的時候,必須剔除sign欄位。
$sign=$data['sign'];
unset($data['sign']);
if($sign==$this->getSign($data)){
//簽名驗證成功後,判斷返回微信返回的
if($data['result_code']=='SUCCESS'){
//根據返回的訂單號做業務邏輯
$arr=array(
'pay_status'=>1,
);
$re=M('order')->where(['order_sn'=>$data['out_trade_no']])->save($arr);
//處理完成之後,告訴微信成功結果!
if($re){
echo'';exit();
}
}
//支付失敗,輸出錯誤信息
else{
$file=fopen('./log.txt','a+');
fwrite($file,"錯誤信息:".$data['return_msg'].date("Y-m-dH:i:s"),time()." ");
}
}
else{
$file=fopen('./log.txt','a+');
fwrite($file,"錯誤信息:簽名驗證失敗".date("Y-m-dH:i:s"),time()." ");
}

}

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

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

Ⅷ php微信支付開發獲取返回值獲取不到

這么幾行代碼看不出什麼問題,我是這樣處理的。

$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($valsas$k)
{
if(strtolower($k['tag'])!='xml')$result_array[strtolower($k['tag'])]=$k['value'];
}
var_mp($result_array);
//$result_array這個變數對應的就是你代碼中的$result

Ⅸ 如何在php源碼里添加微信掃碼支付

這得調用微信的API,不是你加了代碼就可以實現微信支付功能了,微信也是有調用教程的,目前不對個人開放,只對企業開放,也需要認證,一年是300元

閱讀全文

與微信支付php代碼相關的資料

熱點內容
域名與ip地址通過什麼伺服器查 瀏覽:93
企業網站需要什麼雲伺服器配置 瀏覽:909
遼事通伺服器出現錯誤是什麼原因 瀏覽:763
能否將一個表格的子表加密 瀏覽:61
手機ios微信收藏怎麼加密 瀏覽:591
安卓如何改黑色 瀏覽:328
oracle資料庫導出命令 瀏覽:696
用python做鍾表盤 瀏覽:871
腰椎壓縮性骨折吧 瀏覽:324
安卓怎麼把軟體改成火影忍者 瀏覽:702
手機如何切換軟體商店伺服器 瀏覽:325
江蘇省python二級題型 瀏覽:231
文件編譯器在哪 瀏覽:28
選擇目錄時此電腦的文件夾怎麼刪 瀏覽:25
狗狗幣加密支付服務 瀏覽:897
怎麼使用指南針APP確定方向 瀏覽:372
php讀取圖片並輸出 瀏覽:321
如何組合多個pdf文件 瀏覽:669
工作表格excel取消加密 瀏覽:133
真空壓縮袋手泵怎麼用 瀏覽:427