payment 項目2.0版本 php
微信的支付邏輯與支付寶的支付有一些差異。爲了讓客戶端忽略這些差異,統一調用。本sdk作了對應處理。html
# SDK調用git
微信支付不一樣接口須要的參數會有差異。請你們在使用接口時,仔細查看文檔。github
use Payment\ChargeContext; use Payment\Config; use Payment\Common\PayException; // 微信支付,必須設置時區,不然發生錯誤 date_default_timezone_set('Asia/Shanghai'); // 生成訂單號 便於測試 function createPayid() { return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9); } // 訂單信息 $payData = [ "order_no" => createPayid(), "amount" => '0.01',// 單位爲元 ,最小爲0.01 "client_ip" => '127.0.0.1', "subject" => '測試支付', "body" => '支付接口測試', "extra_param" => '', ]; // 微信掃碼支付,須要設置的參數 $payData['product_id'] = '123456'; // 微信公衆號支付,須要的參數 $payData['openid'] = 'otijfvr2oMz3tXnaQdKKbQeeBmhM';// 須要經過微信提供的api獲取該openid /** * 包含客戶的配置文件 * 本次 2.0 版本,主要的改變是將配置文件獨立出來,便於客戶多個帳號的狀況 * 已經使用不一樣方式讀取配置文件,如:db file cache等 */ $wxconfig = [ 'app_id' => 'wxxxx', // 公衆帳號ID 'mch_id' => 'xxxx',// 商戶id 'md5_key' => 'xxxxxx',// md5 祕鑰 'notify_url' => 'http://test.helei.com/pay-notify.html', 'time_expire' => '14', // 涉及資金流動時,須要提供該文件 'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem', 'key_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem', ]; /** * 實例化支付環境類,進行支付建立 */ $charge = new ChargeContext(); try { // 微信 掃碼支付 $type = Config::WX_CHANNEL_QR; // 微信 APP支付 //$type = Config::WX_CHANNEL_APP; // 微信 公衆號支付 //$type = Config::WX_CHANNEL_PUB; $charge->initCharge($type, $wxconfig); $ret = $charge->charge($payData); } catch (PayException $e) { echo $e->errorMessage();exit; } if ($type === Config::WX_CHANNEL_QR) { $url = urlencode($ret); echo "<img alt='掃碼支付' src='http://paysdk.weixin.qq.com/example/qrcode.php?data={$url}' style='width:150px;height:150px;'/>"; } elseif ($type === Config::WX_CHANNEL_PUB) { $json = $ret; var_dump($json);exit; } elseif (stripos($type, 'wx') !== false) { var_dump($ret); } ?>
這裏掃碼支付與公衆號支付分別須要提供不一樣的參數。請必定注意進行區分。不然調用相應端口會拋出異常。數據庫
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
app_id | 公衆帳號ID/應用id | 微信分配的公衆帳號ID | 是 |
mch_id | 商戶號 | 微信支付分配的商戶號 | 是 |
md5_key | 加密的key | 在商戶中心設置 | 是 |
notify_url | 通知地址 | 接收微信支付異步通知回調地址,通知url必須爲直接可訪問的url,不能攜帶參數。 | 是 |
time_expire | 交易過時時間 | 單位爲分鐘,過時後沒法再次支付 | 是 |
cert_path | 密鑰文件 | 可在微信商戶後臺中下載 | 否,退款須要 |
key_path | 密鑰文件 | 可在商戶中心下載 | 否,退款須要 |
這裏須要注意的是,app_id,因爲微信的三個支付接口,須要對應兩個不一樣的app_id。所以再開發中必定要注意。json
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
order_no | 訂單號 | 平臺根據規則生成的訂單號,最長64位,要在商戶數據庫中惟一 | 必須 |
amount | 交易總金額 | 該筆訂單的資金總額,單位爲RMB-Yuan。取值範圍爲[0.01,100000000.00],精確到小數點後兩位。 | 必須 |
client_ip | 客戶端IP | 用戶在建立交易時,該用戶當前所使用機器的IP。 | 必須 |
subject | 商品名稱 | 商品的標題/交易標題/訂單標題/訂單關鍵字等。該參數最長爲128個漢字。 | 必須 |
body | 商品描述 | 對一筆交易的具體描述信息。若是是多種商品,請將商品描述字符串累加傳給body。 | 必須 |
extra_param | 公用回傳參數 | 若是用戶請求時傳遞了該參數,則返回給商戶時會回傳該參數。 | 可選 |
product_id | 商品ID | 掃碼支付,此參數必傳。此id爲二維碼中包含的商品ID,商戶自行定義。 | 可選 |
openid | 用戶標識 | 公衆號支付,此參數必傳,用戶在商戶appid下的惟一標識。 | 可選 |
三種支付方式返回值由於處理方式不一樣,微信方面返回了不一樣的類型。api
app支付返回了須要調用的數組。調用客戶端的方式 查看微信文檔數組
掃碼支付返回了一個地址。可生成一個二維碼,完成支付。微信
公衆號支付,返回的是一個json數據。可直接放入微信的sdk完成jsapi調用。app