支付宝PC扫码支付与手机网站支付

/**
 * 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"; //请不要修改或删除

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值