这里我没有开发openid和acessToken的获取,需要的请参考文档获取。
在阅读本教程之前请熟读微信支付的开发者文档。
直接开始【统一下单】,在实际开发的项目中一般都有mvc分层的开发思想。
根据WxpayAPI_php_v3examplejsapi.php给的代码做修改。
Service:
<?php /** * Created by PhpStorm. * User: skh * Date: 13/03/2017 * Time: 10:43 */ namespace AppHttpServices; 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 AppHttpControllersWechat; use AppHttpServicesWxNotifyService; use AppHttpServicesWxPayService; use IlluminateHttpRequest; use AppHttpRequests; use AppHttpControllersController; use IlluminateSupportFacadesLog; 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="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
------------------------------------------
声明: 原创文章,未经允许,禁止转载!
------------------------------------------