微信支付介面php網站,php對接微信支付教程

本文目錄一覽:

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

一丶 PHP後台後台生成預支付交易單,返回正確的預支付交易回話標識後再在APP裡面調起支付!官方文檔:

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

傳輸給微信的參數要組裝成xml格式發送,傳如參數數組!

public function ToXml($data=array())

    {

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

        {

           return ‘數組異常’;

        }

        $xml = “”;

        foreach ($data as $key=$val)

        {

            if (is_numeric($val)){

                $xml.=””.$key.””.$val.””;

            }else{

                $xml.=””.$key.””;

            }

        }

        $xml.=””;

        return $xml;

    }

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

function rand_code(){

        $str = ‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ’;//62個字元

        $str = str_shuffle($str);

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

        return  $str;

}

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

private function getSign($params) {

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

        foreach ($params as $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端所需參數見微信文檔:;index=2

public function wx_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’] = ”; 接收支付後的通知,必須為能直接訪問的網址,不能跟參數

        $data[‘trade_type’] = ‘APP’;      //支付方式

        //將參與簽名的數據保存到數組  注意:以上幾個參數是追加到$data中的,$data中應該同時包含開發文檔中要求必填的剔除sign以外的所有數據

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

        $xml = $this-ToXml($data);            //數組轉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);//嚴格校驗

        }

        //設置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數據轉換為數組,接收微信返回數據時用到.

public function FromXml($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支付成功後,會調用你填寫的回調地址 . 返回參數詳見微信文檔:;index=3

// 微信支付回調

     function wx_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-d H:i:s”),time().”\r\n”);    

            }

    }

    else{

                $file = fopen(‘./log.txt’, ‘a+’);

           fwrite($file,”錯誤信息:簽名驗證失敗”.date(“Y-m-d H:i:s”),time().”\r\n”);    

            }

}

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

———————

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

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

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

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

這個必須需要公眾號,而且認證後的公眾號。

開通對應介面才可以使用,沒有對應的,是不允許的。

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

你好。關於這個問題:

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

微『信』支『付』介面現在也慢慢的像支『付』寶一個可以利用api介面來實現第3方網|站(pigcms)或應用進行支付了。

希望我的回答對您有用,望採納~

PHP調用微信支付介面?

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

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

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

1.獲取訂單信息。

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

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

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

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287278.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 13:07
下一篇 2024-12-23 13:07

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python爬蟲可以爬哪些網站

    Python是被廣泛運用於數據處理和分析領域的編程語言之一。它具有易用性、靈活性和成本效益高等特點,因此越來越多的人開始使用它進行網站爬取。本文將從多個方面詳細闡述,Python爬…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • 猿編程python免費全套教程400集

    想要學習Python編程嗎?猿編程python免費全套教程400集是一個不錯的選擇!下面我們來詳細了解一下這個教程。 一、課程內容 猿編程python免費全套教程400集包含了從P…

    編程 2025-04-29
  • 網站為什麼會被黑客攻擊?

    黑客攻擊是指利用計算機技術手段,入侵或者破壞計算機信息系統的一種行為。網站被黑客攻擊是常見的安全隱患之一,那麼,為什麼網站會被黑客攻擊呢?本文將從不同角度分析這個問題,並且提出相應…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29

發表回復

登錄後才能評論