PHP H5微信支付Demo
微信支付是目前非常流行的一種電子支付方式,它不僅支持APP和PC端,還可以在H5頁面上進行支付。本文將介紹如何使用PHP編寫一個H5微信支付的示例代碼。
首先,我們需要了解微信支付的基本流程。當用戶在H5頁面上選擇使用微信支付時,首先需要將訂單信息提交到服務器。服務器接收到請求后,根據用戶的訂單信息生成一個預支付訂單。然后,將生成的預支付訂單信息返回給前端頁面。前端頁面將收到的訂單信息作為參數通過微信支付接口發起支付請求。支付完成后,服務器會接收到微信的支付結果通知,然后更新訂單狀態并返回支付結果給前端頁面。
接下來,我們來看一下具體的代碼實現。
<?php // 設置變量 $appid = 'your_appid'; $mch_id = 'your_mch_id'; $key = 'your_key'; $notify_url = 'your_notify_url'; // Step 1: 提交訂單信息并生成預支付訂單 $order_data = array( 'out_trade_no' => 'your_out_trade_no', 'body' => '訂單支付', 'total_fee' => '1', 'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], 'notify_url' => $notify_url, 'trade_type' => 'MWEB', 'scene_info' => '{"h5_info": {"type":"Wap","wap_url": "your_wap_url","wap_name": "your_wap_name"}}' ); // 發起微信支付統一下單接口請求 $unified_order_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $unified_order_data = array( 'appid' => $appid, 'mch_id' => $mch_id, 'nonce_str' => md5(microtime(true)), 'sign_type' => 'MD5', 'body' => $order_data['body'], 'out_trade_no' => $order_data['out_trade_no'], 'total_fee' => $order_data['total_fee'], 'spbill_create_ip' => $order_data['spbill_create_ip'], 'notify_url' => $order_data['notify_url'], 'trade_type' => $order_data['trade_type'], 'scene_info' => $order_data['scene_info'] ); $unified_order_data['sign'] = generateSign($unified_order_data, $key); $response = httpPost($unified_order_url, arrayToXml($unified_order_data)); // 解析微信支付統一下單接口響應 $xml = simplexml_load_string($response); $json = json_encode($xml); $result_data = json_decode($json, true); // 判斷微信支付統一下單接口響應結果 if ($result_data['return_code'] == 'SUCCESS' && $result_data['result_code'] == 'SUCCESS') { $prepay_id = $result_data['prepay_id']; $mweb_url = $result_data['mweb_url']; // Step 2: 返回預支付訂單信息給前端頁面 echo json_encode(array( 'prepay_id' => $prepay_id, 'mweb_url' => $mweb_url )); } else { echo "下單失敗"; } // 生成簽名 function generateSign($params, $key) { ksort($params); $string = ''; foreach ($params as $k => $v) { if ($v != '' && $k != 'sign') { $string .= $k . '=' . $v . '&'; } } $string .= 'key=' . $key; return strtoupper(md5($string)); } // 發送POST請求 function httpPost($url, $data) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); $response = curl_exec($curl); curl_close($curl); return $response; } // 數組轉XML function arrayToXml($array) { $xml = ''; foreach ($array as $key => $value) { $xml .= "<$key><![CDATA[$value]]></$key>"; } return "<xml>$xml</xml>"; } ?>
以上代碼是一個簡單的H5微信支付示例。在這個示例中,我們通過調用微信支付接口實現了訂單的提交和支付功能。我們通過設置不同的參數,可以實現更加復雜的支付場景,例如設置不同的支付方式、指定不同的商品信息等。
總的來說,PHP H5微信支付示例代碼提供了基本的支付功能,并可以根據實際需求進行擴展。通過學習和理解這個示例,我們可以掌握如何使用PHP編寫一個簡單的H5微信支付系統。