https://pay.weixin.qq.com/wiki/doc/api/download/WxpayAPI_php_v3.zip 下載獲取微信支付demo壓縮包打開壓縮包,并將其中 WxpayAPI_php_v3\example下的 jsapi.php log.php WxPay.JsApiPay.php WxPay.MicroPay.php WxPay.NativePay.php 解壓縮到根目錄 tellingtent/打開 WxPay.JsApiPay.php WxPay.MicroPay.php WxPay.NativePay.php 將其中涉及調用 ../lib/...... 路徑的改成 lib/......然后即可將微信支付demo壓縮包中WxpayAPI_php_v3下的lib文件夾也解壓縮到根目錄 tellingtent/修改 tellingtent/lib/WxPay.Config.php 以下內容 const APPID = 'wx6385582ec2cc9108';//wx426b3015555a46be const MCHID = '1226119502';//1900009851 const KEY = '8eujY70kmgkseu274980kH9e0uri78kd';//8934e7d15453e97507ef794cf7b0519d const APPSECRET = '7813490da6f1265e4901ffb80afaa36f';//7813490da6f1265e4901ffb80afaa36f 這些內容從公眾號中獲取然后登陸公眾號,設置支付授權目錄,這里是 http://anting.imagchina.com/tellingtent/ tellingtent/即是存放支付文件的根目錄并且在設置支付授權目錄中下載一個MP_verify_2YfIdHkI4jOcQ30B.txt文件,存放到根目錄 tellingtent/ 中打開jsapi.php 將其中獲取openid的 $tools->GetOpenid(); 換成已獲取的openid,這里是 osKoBjx_vTKa67vgoJjH4Dg81tRk 在這里暫時不借用官方的獲取openid方法在微信中打開 http://anting.imagchina.com/tellingtent/jsapi.php 即可進行支付jsapi.php里的支付回調單號SetOut_trade_no自定義賦值,但不能重復,在支付成功后,微信會回調jsapi.php里SetNotify_url設定的路徑,回調信息中有對應付款成功的out_trade_no單號最好在調用微信支付的js方法callpay()之前,先創建本地的訂單信息,保存out_trade_no單號,并且設定支付狀態為未支付 在設定好的回調頁面中根據支付成功的out_trade_no單號修改數據庫中對應訂單的付款狀態為支付成功支付成功后回調頁面內容 PHP非以傳統$_GET,$_POST方式獲取微信回調內容,以 file_get_contents('php://input'); 獲取 例 <?php //$postStr獲取到的是格式化字符串內容 $postStr = file_get_contents('php://input'); ?> 例 <xml> <appid><![CDATA[wx6385582ec2cc9108]]></appid> <attach><![CDATA[嘉亭薈移動故事屋]]></attach> <bank_type><![CDATA[CMB_DEBIT]]></bank_type> <cash_fee><![CDATA[8000]]></cash_fee> <fee_type><![CDATA[CNY]]></fee_type> <is_subscribe><![CDATA[Y]]></is_subscribe> <mch_id><![CDATA[1226119502]]></mch_id> <nonce_str><![CDATA[d0hh1c3m1ynd52qhajgsk6jwqcvkez0p]]></nonce_str> <openid><![CDATA[osKoBj2iVkFtf8-MBcHXyWkaXT4k]]></openid> <out_trade_no><![CDATA[122611950220160923172852]]></out_trade_no> <result_code><![CDATA[SUCCESS]]></result_code> <return_code><![CDATA[SUCCESS]]></return_code> <sign><![CDATA[D4F31510A3EED6F54AB0B4A02D772C98]]></sign> <time_end><![CDATA[20160923173254]]></time_end> <total_fee>8000</total_fee> <trade_type><![CDATA[JSAPI]]></trade_type> <transaction_id><![CDATA[4006602001201609234721061954]]></transaction_id> </xml>需要手動截取獲取其中想要信息值 如想要out_trade_no與transaction_id的值 例 <?php $postStr = file_get_contents('php://input');$trade_noarr = explode ( "out_trade_no><![CDATA[", $postStr ); $trade_noarr = explode ( "]]></out_trade_no", $trade_noarr [1] ); $out_trade_no = $trade_noarr [0];$arr = explode ( "transaction_id><![CDATA[", $postStr ); $arr = explode ( "]]></transaction_id", $arr [1] ); $transaction_id = $arr [0];// 即可根據返回的訂單號修改數據庫中對應訂單信息 ?>微信成功后同一單號會多次回調信息內容,一般三次設定的支付路徑是根目錄 tellingtent/ 不變可以把之前的 jsapi.php log.php WxPay.JsApiPay.php WxPay.MicroPay.php WxPay.NativePay.php lib文件夾 單獨放到某個目錄下面 例如這里放到根目錄下的 tellingtent/testpay 文件夾里 把支付樣例jsapi.php文件中的html部分代碼提取出來單獨存放在根目錄下的某個文件內,這里是 tellingtent/testpay.php 代碼內容 <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <script type="text/javascript" src="./testpay/jquery.min.js"></script> <title>微信支付樣例-支付</title> <script type="text/javascript">var jsApiParameters = '';$.post("./testpay/jsapi.php",{},function(data){jsApiParameters = data;alert(jsApiParameters);},"json")//調用微信JS api 支付function jsApiCall(){if(jsApiParameters){WeixinJSBridge.invoke('getBrandWCPayRequest',jsApiParameters,function(res){WeixinJSBridge.log(res.err_msg);alert(res.err_code+res.err_desc+res.err_msg);});}}function callpay(){if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall);}}else{jsApiCall();}}</script> </head> <body><br /><font color="#9ACD32"><b>該筆訂單支付金額為<spanstyle="color: #f00; font-size: 50px">1分</span>錢</b></font><br /><br /><div align="center"><buttonstyle="width: 210px; height: 50px; border-radius: 15px; background-color: #FE6714; border: 0px #FE6714 solid; cursor: pointer; color: white; font-size: 16px;"type="button" οnclick="callpay()">立即支付</button></div> </body> </html>原頁面直接通過php獲取的jsApiParameters,改為通過ajax獲取 這樣tellingtent/testpay文件夾內的原文件jsapi.php里只剩下之前的php代碼 <?php ini_set('date.timezone','Asia/Shanghai'); //error_reporting(E_ALL); require_once "lib/WxPay.Api.php"; require_once "WxPay.JsApiPay.php"; require_once 'log.php'; //初始化日志 $logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log'); $log = Log::Init($logHandler, 15);//打印輸出數組信息 function printf_info($data) {foreach($data as $key=>$value){//echo "<font color='#00ff55;'>$key</font> : $value <br/>"; } }//①、獲取用戶openid $tools = new JsApiPay(); $openId = 'osKoBjx_vTKa67vgoJjH4Dg81tRk';//$tools->GetOpenid();//②、統一下單 $input = new WxPayUnifiedOrder(); $input->SetBody("test"); $input->SetAttach("test"); $input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis")); $input->SetTotal_fee("1"); $input->SetTime_start(date("YmdHis")); $input->SetTime_expire(date("YmdHis", time() + 600)); $input->SetGoods_tag("test"); $input->SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php"); $input->SetTrade_type("JSAPI"); $input->SetOpenid($openId); $order = WxPayApi::unifiedOrder($input); //echo '<font color="#f00"><b>統一下單支付單信息</b></font><br/>'; printf_info($order); $jsApiParameters = $tools->GetJsApiParameters($order);echo $jsApiParameters;exit;//獲取共享收貨地址js函數參數 //$editAddress = $tools->GetEditAddressParameters();//③、在支持成功回調通知中處理成功之后的事宜,見 notify.php /*** 注意:* 1、當你的回調地址不可訪問的時候,回調通知會失敗,可以通過查詢訂單來確認支付是否成功* 2、jsapi支付時需要填入用戶openid,WxPay.JsApiPay.php中有獲取openid流程 (文檔可以參考微信公眾平臺“網頁授權接口”,* 參考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html)*/ ?>如此微信中訪問 http://anting.imagchina.com/tellingtent/testpay.php 也可以進行支付 只要支付調用js的文件在支付授權指定目錄中即可
?