當前位置:首頁 » 網頁前端 » php手機web微信支付
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

php手機web微信支付

發布時間: 2023-05-04 16:22:14

❶ php開發微信支付要多久

1到5天棗爛。使用告搭php開發微信支付時,由於審核速襪岩拿度較慢,需要花費1到5天的時間。微信支付是騰訊集團旗下的第三方支付平台,致力於為用戶和企業提供安全、便捷、專業的在線支付服務。

❷ 如何利用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 web可以微信支付嗎

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

1.獲取訂單信息。

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

❹ 你好 !! 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調用微信支付介面

不一定,看你業務需要。這些步驟只是描述微信系統會發出和接收什麼數據,商戶需要發送和會接收到什麼數據,用戶需要執行什麼操作。回調的URL是用來接收數據的,至於發送並沒有要求。

❻ 由PHP開發的H5微信支付介面

這個必須需要公眾號,而且認證後的公眾號。
開通對應介面才可以使用,沒有對應的,是不允許的。

❼ PHP對接第三方支付渠道之微信支付v3版本

文接上篇 PHP如何更科學地接入第三方渠道 ,既然已經寫到這了,索性創早虧段建了一個gitee倉庫,地址: https://gitee.com/wuzhh/tp6-payment ,有需要的可以去看看。

言歸正傳,微信支付v3版本剛推出不久,鑒於微信官方一貫語焉不詳的尿性,論壇上自然仍舊一片哀嚎,鄙人一路踩坑下來,倒也還算順利,把過程分享給大家參考~

在微信商戶平台中找到API安全,這一步按照官方提示操作即可,比較簡單不再贅述

注意,第1步中導出的證書有三個文件,以我的經驗只有apiclient_key.pem是有用的,apiclient_cert.pem則沒什麼用(沒發現它有什麼用),拿到apiclient_key.pem的路徑之後:

上面是官方提供的命令,此處:
apiV3key = 設置的v3秘鑰
mchId = 商戶號
mchPrivateKeyFilePath = apiclient_key.pem的路徑
mchSerialNo = 商戶API證書序列號
outputFilePath = 微信支付平台陸譽證書的存儲路徑

你可能會問,-c參數填啥?這里需要說一下這個參數是驗證證書用的,填的是微信支付平台證書的路徑,因為我們現在是 第一次創建證書,所以-c參數不需要填寫 ,需要特別注意一下。

這樣就能確保上文注入的支付實例都有空鉛共同的支付和回調方法

有部分方法文中沒上,我個人的項目中用上了,就暫且保留吧

通知部分過段時間再更,明天就算端午節就更到這了,有需要的小夥伴可以留言,我爭取盡快補上~

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

這類專業的技術問題,建議您可以下載一下開發者文檔
該文檔在您申請了微信商家之後就可以下載的
然後掘頌根據文檔裡面的技術規范進行調整余陵和開發判毀鄭

❾ 微信支付介面開發用php如何實現

你好。關於這個問題:
先進入開發者中心-》網頁授權獲取用戶基本信息-》修改成你的測試域名。否則會出現redirect_uri 參數

微『信』支『付』介面現在也慢慢的像支『付』寶一個可以利用api介面來實現第3方網|站(pigcms)或應用進行支付了。
希望我的回答對您有用,望採納~

❿ php 微信掃碼支付需要注意什麼

獲得token id換取票據ticket,換取二維碼。支付沒談介面的話要提前申請,認證通過,好凱陵像盯察戚暫時不對個人開發者開放