這里我沒有開發openid和acessToken的獲取,需要的請參考文檔獲取。
在閱讀本教程之前請熟讀微信支付的開發者文檔。
直接開始【統一下單】,在實際開發的項目中一般都有mvc分層的開發思想。
根據WxpayAPI_php_v3\example\jsapi.php給的代碼做修改。
Service:
<?php /** * Created by PhpStorm. * User: skh * Date: 13/03/2017 * Time: 10:43 */ namespace App\Http\Services; class WxPayService { /** * @param $openId * @return String js支付參數 */ public function wxpay($openId) { //統一下單 $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://wxpay.foo.cn/weixin/test/notify"); $input->SetTrade_type("JSAPI"); $input->SetOpenid($openId); $order = \WxPayApi::unifiedOrder($input); $jsApiParameters = $this->getJsApiParameters($order); return $jsApiParameters; } /** * * 獲取jsapi支付的參數 * @param $UnifiedOrderResult array 統一支付接口返回的數據 * @throws \WxPayException * * @return array ,可直接填入js函數作為參數 */ private function getJsApiParameters($UnifiedOrderResult) { if(!array_key_exists("appid", $UnifiedOrderResult) || !array_key_exists("prepay_id", $UnifiedOrderResult) || $UnifiedOrderResult['prepay_id'] == "") { throw new \WxPayException("參數錯誤"); } $jsapi = new \WxPayJsApiPay(); $jsapi->SetAppid($UnifiedOrderResult["appid"]); $timeStamp = time(); $jsapi->SetTimeStamp("$timeStamp"); $jsapi->SetNonceStr(\WxPayApi::getNonceStr()); $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); $jsapi->SetSignType("MD5"); $jsapi->SetPaySign($jsapi->MakeSign()); $parameters = $jsapi->GetValues(); return $parameters; } }
Controller:
<?php namespace App\Http\Controllers\Wechat; use App\Http\Services\WxNotifyService; use App\Http\Services\WxPayService; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Log; class WxPayController extends Controller { /** * 支付接口 */ public function doPay(Request $request) { $openId = "oOUejv2ZyEDt3bIe6lQ4C32Z-9sk"; $wxPayService = new WxPayService(); $jsApiParameters = $wxPayService->wxpay($openId); // 返回支付詳情的頁面,並把從【統一下單】接口中得到json串串給頁面 // 這個頁面描述了買的啥,多少錢,支付按鈕之類的 // 在這個頁面點擊支付的時候可能出現找不到appId的錯誤.建議你按照文檔上的寫法發起支付. // 例子我在支付頁面里的js給出了demo return view("pay_details",compact('jsApiParameters')); } /** * 微信支付回調接口 */ public function notify() { Log::info("微信支付通知被調用了!!"); $notify = new WxNotifyService(); $notify->Handle(false); } }
View:
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <title>微信支付樣例-支付</title> <script type="text/javascript"> //調用微信JS api 支付 function jsApiCall() { // 建議使用這中方式發起支付. WeixinJSBridge.invoke('getBrandWCPayRequest', { //公眾號名稱,由商戶傳入 "appId":"{{$jsApiParameters['appId']}}", "timeStamp":"{{$jsApiParameters['timeStamp']}}", //時間戳,自1970年以來的秒數 "nonceStr":"{{$jsApiParameters['nonceStr']}}", //隨機串 "package":"{{$jsApiParameters['package']}}", "signType":"{{$jsApiParameters['signType']}}", //微信簽名方式: "paySign":"{{$jsApiParameters['paySign']}}" //微信簽名 }, function(res){ // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在用戶支付成功后返回 ok,但並不保證它絕對可靠。 if(res.err_msg == "get_brand_wcpay_request:ok" ) {} } ); } 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>該筆訂單支付金額為<span style="color:#f00;font-size:50px">1分</span>錢</b></font><br/><br/> <p>{{'package'}}</p> <div align="center"> <button style="width:210px; height:50px; border-radius: 15px;background-color:#FE6714; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;" type="button" onclick="callpay()" >立即支付</button> </div> </body> </html>
下一篇:http://www.cnblogs.com/xxoome/p/6572590.html
技術交流群:576269252
------------------------------------------
聲明: 原創文章,未經允許,禁止轉載!
------------------------------------------