# 支付服务 * * * * * ![](https://img.kancloud.cn/01/7e/017e2d8015791d800d3ec6fa57ed12af_670x329.png) 此处仅讲解最常用的支付宝及微信支付。 1.首先我们需要安装支付宝及微信支付驱动。 ![](https://img.kancloud.cn/d8/f0/d8f07e7efe0653e1103c9c81b08ec6ef_1228x394.png) ![](https://img.kancloud.cn/d2/a7/d2a7e0242bdf3d8dd4ead834055e070b_1224x302.png) 以上图片中的信息是需要您安装时录入进去的,千万不要录入错误。 至于这些信息从哪里看,可以百度搜索,此处不具体讲解信息从哪里查看。 当支付宝和微信驱动安装完成后,参考下面代码进行支付调起。 ``` /** * 支付服务 */ public function demoPay() { $test_order['order_sn'] = date('ymdhis', time()) . rand(10000, 99999); $test_order['body'] = '测试'; $test_order['order_amount'] = 0.01; // (微信公众号下使用JSAPI支付时才需要此参数,用于跳转授权) $test_order['redirect_uri'] = 'http://ob.xxx.cn'; //-------------- 支付宝相关支付----------------- // (电脑网站环境下)支付宝PC网站发起支付 echo $this->servicePay->driverAlipay->pay($test_order); // (移动端非微信环境浏览器下)支付宝H5支付 echo $this->servicePay->driverAlipay->pay($test_order, 'h5'); // (支付宝APP支付) 返回给IOS或安卓 客户端处理 dump($this->servicePay->driverAlipay->pay($test_order, 'app')); //-------------- 微信相关支付------------------ // (电脑网站环境下)微信PC网站发起支付 echo $this->servicePay->driverWxpay->pay($test_order); // (移动端非微信环境的浏览器下)微信 H5 支付 echo '<a href="'.$this->servicePay->driverWxpay->pay($test_order, 'h5').'">点击跳转H5微信支付</a>'; // (微信公众号环境下) JSAPI 支付 echo $this->servicePay->driverWxpay->pay($test_order, 'JSAPI'); // (微信APP支付) 返回给IOS或安卓 客户端处理 dump($this->servicePay->driverWxpay->pay($test_order, 'app')); } ``` 2.支付服务异步通知及同步跳转配置。 ![](https://img.kancloud.cn/4e/81/4e81673de90a5677d826d745136e899f_1315x771.png) 此处为了方便开发者参考,咱们演示处理回调地址为 demo/demoPayNotify 演示异步通知处理代码如下 ``` /** * 支付异步通知处理 */ public function demoPayNotify() { // 获取订单号 $order_sn = get_order_sn(); // 获取订单信息 $info = $this->modelOrder->getInfo(['order_sn' => $order_sn]); // 验证订单是否存在 empty($info) && die('不存在订单号'); // 获取支付驱动 $select_driver = SYS_DRIVER_DIR_NAME . $info['pay_type']; // 验证通知是否合法 $result = $this->servicePay->$select_driver->notify(); /** * @todo 支付完成后通过订单号处理相应业务逻辑 */ if ($result) { // 执行支付成功业务逻辑代码块... } } ``` 可以将异步通知地址设置成您需要的地址(注意在未登录和没有权限的情况下可以正常访问)。 然后将通知的演示代码粘贴过去根据您的具体情况适当调整,然后拿到订单号处理您的业务逻辑即可。 3.如果您使用了微信PC扫码支付或微信JSAPI支付。 通常可以调起支付可以异步通知处理逻辑,基本上已满足日常需求。 但是为了提升用户体验,比如前端需要异步检测用户是否扫码支付成功进行相应跳转。 微信PC扫码支付在下图红框区域处理前端检测 ![](https://img.kancloud.cn/02/eb/02eb1967a0aabc4ade8640ee82e5adaa_1216x1046.png) 微信JSAPI支付在下图红框区域处理前端检测 ![](https://img.kancloud.cn/ec/1e/ec1e18ba97f2ad574353881d9c8b3fb5_1045x724.png) 服务端检测代码参考如下 ``` /** * 前端支付状态检测 */ public function demoCheckPayStatus($param = []) { // 业务逻辑代码块... dump($param['order_sn']); // 未支付 die('error'); // 已支付 die('succeed'); } ``` 前端轮询服务端请求,若异步通知成功订单支付状态将被修改。那么此时前端检测到支付状态修改后进行相应跳转即可。 4.若您是APP支付,直接将驱动执行结果返回给安卓或IOS客户端处理即可。