當前位置:首頁 » 編程語言 » phpweb微信支付介面

phpweb微信支付介面

發布時間: 2023-05-28 11:28:44

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

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

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

❷ 如何利用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如何實現

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

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

❹ PHP調用微信支付介面

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

❺ 如何用php開發微信支付介面

appid //公眾號後台開發者中心獲得(和郵件內的一樣) mchid//郵件內獲得 key//商戶後台自己設置 appsecret //公眾號開發者中心獲得
兩個證書文件,郵件內獲得 apiclient_cert.pem apiclient_key.pem
注意事項:
公眾號後台微信支付-》開發配置-》新增測試目錄和測試個人微信號。
開發者中心-》網頁授權獲取用戶基本信息-》修改成你的測試域名。否則會出現redirect_uri 參數

❻ 微信支付介面PHP的金額自定義應該怎麼寫

您要做的是微信公眾號的掃二維碼付款吧,可以客戶自定義金額的那種。

這個是需要開發的。


您可以看下發案例,可以用戶自行輸入金額進行付款,可放在店裡給客戶支付用。

至於手續費,是不需要額外支付的,就只要支付騰訊收的0.6%。

只是開發要收費,國內支付開發機構比較專業的是傑客科技 ,你可以找他們在線工作人員幫忙開發下。


註:客戶付款是直接到微信官方的管理後台。

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

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

1.獲取訂單信息。

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

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

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

❽ php 微信支付jsapi怎麼調用

問題出在網頁端調起支付API介面中timeStamp參數,必須是string類型,但是php默認生成的時間戳是int類型。解決方法就是修改下 lib/Wxpay.Data.php約2731行處SetTimeStamp方法,修改為 $this->values['timeStamp'] = (string)$value; 即可

❾ thinkphp微信h5支付sdk怎麼用

主要的支付代碼如下:

<?php

namespaceHomeController;

useThinkController;

//微信支付類

{

//獲取access_token過程中的跳轉uri,通過跳轉將code傳入jsapi支付頁面

publicfunctionjs_api_call(){

$order_sn=I('get.order_sn','');

if(empty($order_sn)){

header('location:'.__ROOT__.'/');

}

vendor('Weixinpay.WxPayPubHelper');

//使用jsapi介面

$jsApi=newJsApi_pub();

//=========步驟1:網頁授權獲取用戶openid============

//通過code獲得openid

if(!isset($_GET['code'])){

//觸發微信返回code碼

$url=$jsApi->createOauthUrlForCode('域名/Wxpay/js_api_call?order_sn='.$order_sn);

//$url=$jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);

Header("Location:$url");

}else{

//獲取code碼,以獲取openid

$code=$_GET['code'];

$jsApi->setCode($code);

$openid=$jsApi->getOpenId();

}

$res=array(

'order_sn'=>'20150109113322',

'order_amount'=>255

);

//=========步驟2:使用統一支付介面,獲取prepay_id============

//使用統一支付介面

$unifiedOrder=newUnifiedOrder_pub();

//設置統一支付介面參數

//設置必填參數

//appid已填,商戶無需重復填寫

//mch_id已填,商戶無需重復填寫

//noncestr已填,商戶無需重復填寫

//spbill_create_ip已填,商戶無需重復填寫

//sign已填,商戶無需重復填寫

$total_fee=$res['order_amount']*100;

//$total_fee=1;

$body="訂單支付{$res['order_sn']}";

$unifiedOrder->setParameter("openid","$openid");//用戶標識

$unifiedOrder->setParameter("body",$body);//商品描述

//自定義訂單號,此處僅作舉例

$out_trade_no=$res['order_sn'];

$unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商戶訂單號

$unifiedOrder->setParameter("total_fee",$total_fee);//總金額

//$unifiedOrder->setParameter("attach","order_sn={$res['order_sn']}");//附加數據

$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址

$unifiedOrder->setParameter("trade_type","JSAPI");//交易類型

//非必填參數,商戶可根據實際情況選填

//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號

//$unifiedOrder->setParameter("device_info","XXXX");//設備號

//$unifiedOrder->setParameter("attach","XXXX");//附加數據

//$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間

//$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間

//$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記

//$unifiedOrder->setParameter("openid","XXXX");//用戶標識

//$unifiedOrder->setParameter("proct_id","XXXX");//商品ID

$prepay_id=$unifiedOrder->getPrepayId();

//=========步驟3:使用jsapi調起支付============

$jsApi->setPrepayId($prepay_id);

$jsApiParameters=$jsApi->getParameters();

$wxconf=json_decode($jsApiParameters,true);

if($wxconf['package']=='prepay_id='){

$this->error('當前訂單存在異常,不能使用支付');

}

$this->assign('res',$res);

$this->assign('jsApiParameters',$jsApiParameters);

$this->display('jsapi');

}

//非同步通知url,商戶根據實際開發過程設定

publicfunctionnotify_url(){

vendor('Weixinpay.WxPayPubHelper');

//使用通用通知介面

$notify=newNotify_pub();

//存儲微信的回調

$xml=$GLOBALS['HTTP_RAW_POST_DATA'];

$notify->saveData($xml);

//驗證簽名,並回應微信。

//對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,

//微信會通過一定的策略(如30分鍾共8次)定期重新發起通知,

//盡可能提高通知的成功率,但微信不保證通知最終能成功。

if($notify->checkSign()==FALSE){

$notify->setReturnParameter("return_code","FAIL");//返回狀態碼

$notify->setReturnParameter("return_msg","簽名失敗");//返回信息

}else{

$notify->setReturnParameter("return_code","SUCCESS");//設置返回碼

}

$returnXml=$notify->returnXml();

//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======

//以log文件形式記錄回調信息

//$log_name="notify_url.log";//log文件路徑

//$this->log_result($log_name,"【接收到的notify通知】: ".$xml." ");

$parameter=$notify->xmlToArray($xml);

//$this->log_result($log_name,"【接收到的notify通知】: ".$parameter." ");

if($notify->checkSign()==TRUE){

if($notify->data["return_code"]=="FAIL"){

//此處應該更新一下訂單狀態,商戶自行增刪操作

//$this->log_result($log_name,"【通信出錯】: ".$xml." ");

//更新訂單數據【通信出錯】設為無效訂單

echo'error';

}

elseif($notify->data["result_code"]=="FAIL"){

//此處應該更新一下訂單狀態,商戶自行增刪操作

//$this->log_result($log_name,"【業務出錯】: ".$xml." ");

//更新訂單數據【通信出錯】設為無效訂單

echo'error';

}

else{

//$this->log_result($log_name,"【支付成功】: ".$xml." ");

//我這里用到一個process方法,成功返回數據後處理,返回地數據具體可以參考微信的文檔

if($this->process($parameter)){

//處理成功後輸出success,微信就不會再下發請求了

echo'success';

}else{

//沒有處理成功,微信會間隔的發送請求

echo'error';

}

}

}

}

//訂單處理

privatefunctionprocess($parameter){

//此處應該更新一下訂單狀態,商戶自行增刪操作

/*

*返回的數據最少有以下幾個

*$parameter=array(

'out_trade_no'=>xxx,//商戶訂單號

'total_fee'=>XXXX,//支付金額

'openid'=>XXxxx,//付款的用戶ID

);

*/

returntrue;

}

}

?>
熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:336
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:378
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:612
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:32
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:944
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:741
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:803
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:511
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:372