/** * PC扫码与手机网站区别只是引入的支付类不同、实例化类不同 */ //商户订单号,商户网站订单系统中唯一订单号,必填 $out_trade_no = I('post.order_number'); //订单名称,必填 $proName = '灯饰商品'; //付款金额,必填 $total_amount = I('post.total_amount'); //商品描述,可空 $body = '';//trim($_POST['WIDbody']); Vendor('Alipay.aop.AopClient'); Vendor('Alipay.aop.request.AlipayTradePagePayRequest'); //PC扫码支付类 //Vendor('Alipay.aop.request.AlipayTradeWapPayRequest'); //手机网站支付类 //请求 $c = new \AopClient(); $config = C('alipay'); //支付宝基本参数 $c->appId = $config['app_id']; $c->rsaPrivateKey = $config['merchant_private_key']; $c->format = "json"; $c->charset= "UTF-8"; $c->signType= "RSA2"; $c->alipayrsaPublicKey = $config['alipay_public_key']; $request = new \AlipayTradePagePayRequest(); //$request = new \AlipayTradeWapPayRequest(); //手机网站 $request->setReturnUrl($config['return_url']); $request->setNotifyUrl($config['notify_url']); $request->setBizContent("{" . " \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," . " \"subject\":\"$proName\"," . " \"out_trade_no\":\"$out_trade_no\"," . " \"total_amount\":$total_amount," . " \"body\":\"$body\"" . " }"); $result = $c->pageExecute ($request); echo $result; //直接输出,支付宝自动调起收银台 /** * 异步通知验证 * 注:外网必须能够访问 */ Vendor('Alipay.pagepay/service/AlipayTradeService'); $arr=$_POST; $config = C('alipay'); $alipaySevice = new \AlipayTradeService($config); $alipaySevice->writeLog(var_export($_POST,true)); $result = $alipaySevice->check($arr); /* 实际验证过程建议商户添加以下校验。 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) 4、验证app_id是否为该商户本身。 */ if($result) {//验证成功 / //请在这里加上商户的业务逻辑程序代 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //商户订单号 $out_trade_no = $_POST['out_trade_no']; //支付宝交易号 $trade_no = $_POST['trade_no']; //交易状态 $trade_status = $_POST['trade_status']; //出现这两种返回值说明支付成功---接口文档中有详细值说明 if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //①查询订单状态及总额 //②判断订单状态是否已经改变,如果没改变,继续判断订单金额是否一致 //③一致则执行订单修改状态操作,记录支付类型及金额 //④最后一定要输出SUCCESS!!! echo "success"; //请不要修改或删除 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 } }else { //验证失败 echo "fail"; //请不要修改或删除 }
支付宝PC扫码支付与手机网站支付
最新推荐文章于 2023-07-05 15:29:36 发布