在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这里我没有开发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_>]); $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 ------------------------------------------ |
2022-08-30
2022-08-15
2022-08-17
2022-11-06
2022-08-17
请发表评论