基於php開發app微信支付介面

來源:互聯網
上載者:User
這篇文章主要介紹了關於基於php開發app支付介面,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

定義好商戶支付資訊

define(APPID, $payment ['appId']); // appid

define(APPSECRET, $payment ['appSecret']); // appSecret

define(MCHID, $payment ['partnerId']);//商戶號
define(KEY, $payment ['partnerKey']); // 通加密串

define(NOTIFY_URL, $return_url); // 成功回調url

     //簽名所需        $signArray = array(            'appid' => $payment['appId'], //appid            'mch_id' => $payment['partnerId'],            'nonce_str' => self::createNoncestr(),            'out_trade_no' => $order['order_sn'],                       'body' => $order['body'],            "total_fee" => $order ['order_amount'],            "notify_url" => $return_url,            "spbill_create_ip" => $_SERVER["REMOTE_ADDR"],            "trade_type" => "APP",        );
 $sign=self::getSign($signArray);         //統一下單        $goPay = array(            'appid' => $payment['appId'], //appid            'mch_id' => $payment['partnerId'],            'nonce_str' => $signArray['nonce_str'], //產生隨機字串            'sign' => $sign,            'out_trade_no' => $order['order_sn'],                        "total_fee" => $order ['order_amount'],             'body' => $order['body'],            "notify_url" => $return_url,             "spbill_create_ip" => $_SERVER["REMOTE_ADDR"],            "trade_type" => "APP",        );        //轉化xml        $goPayXml=self::arrayToXml($goPay);        $result=self::sendPrePayCurl($goPayXml);        return $result;

產生隨機字串函數

    //隨機產生字串    public function createNoncestr($length = 32) {        $chars = "abcdefghijklmnopqrstuvwxyz0123456789";        $str = "";        for ($i = 0; $i < $length; $i++) {            $str.= substr($chars, mt_rand(0, strlen($chars) - 1), 1);        }        return $str;    }

簽名函數

    /**     * 作用:產生簽名     */    public function getSign($Obj) {        foreach ($Obj as $k => $v) {            //if($k == 'code') continue;            //if($k == 'from') continue;            $Parameters[$k] = $v;        }        //簽名步驟一:按字典序排序參數        ksort($Parameters);        $String = self::formatBizQueryParaMap($Parameters, false);        //echo '【string1】'.$String.'</br>';        //簽名步驟二:在string後加入KEY        $String = $String . "&key=" . KEY;               //echo "【string2】".$String."</br>";        //簽名步驟三:MD5加密        $String = md5($String);        //echo "【string3】 ".$String."</br>";        //簽名步驟四:所有字元轉為大寫        $result_ = strtoupper($String);        //echo "【result】 ".$result_."</br>";        return $result_;    }
 //格式化簽名所需參數    public function formatBizQueryParaMap($paraMap, $urlencode) {        $buff = "";        ksort($paraMap);        foreach ($paraMap as $k => $v) {            if ($urlencode) {                $v = urlencode($v);            }            //$buff .= strtolower($k) . "=" . $v . "&";            $buff .= $k . "=" . $v . "&";        }        $reqPar;        if (strlen($buff) > 0) {            $reqPar = substr($buff, 0, strlen($buff) - 1);        }        return $reqPar;    }

把所要請求參數組裝xml

/** * 作用:array轉xml,把請求參數組裝xml */function arrayToXml($arr)    {        $xml = "<xml>";        foreach ($arr as $key=>$val)        {         if (is_numeric($val))         {         $xml.="<".$key.">".$val."</".$key.">";          }         else         $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";          }        $xml.="</xml>";        return $xml;     }
//通過curl發送資料給介面的函數    public function sendPrePayCurl($xmlData) {        $url = "https://api.mch.weixin.qq.com/pay/unifiedorder";        $header[] = "Content-type: text/xml";        $curl = curl_init();        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);        curl_setopt($curl, CURLOPT_URL, $url);        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);        curl_setopt($curl, CURLOPT_POST, 1);        curl_setopt($curl, CURLOPT_POSTFIELDS, $xmlData);        $data = curl_exec($curl);        if (curl_errno($curl)) {            print curl_error($curl);        }        curl_close($curl);        return self::XMLDataParse($data);    }//xml格式資料解析函數    public static function XMLDataParse($data) {        $msg = array();        $msg = (array) simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);        return $msg;    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.