barpay_test.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: xudong.ding
  5. * Date: 16/5/20
  6. * Time: 下午3:31
  7. */
  8. use app\common\services\alipay\f2fpay\model\builder\ExtendParams;
  9. header("Content-type: text/html; charset=utf-8");
  10. if (!empty($_POST['out_trade_no'])&& trim($_POST['out_trade_no'])!="") {
  11. // (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
  12. // 需保证商户系统端不能重复,建议通过数据库sequence生成,
  13. //$outTradeNo = "barpay" . date('Ymdhis') . mt_rand(100, 1000);
  14. $outTradeNo = $_POST['out_trade_no'];
  15. // (必填) 订单标题,粗略描述用户的支付目的。如“XX品牌XXX门店消费”
  16. $subject = $_POST['subject'];
  17. // (必填) 订单总金额,单位为元,不能超过1亿元
  18. // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
  19. $totalAmount = $_POST['total_amount'];
  20. // (必填) 付款条码,用户支付宝钱包手机app点击“付款”产生的付款条码
  21. $authCode = $_POST['auth_code']; //28开头18位数字
  22. // (可选,根据需要使用) 订单可打折金额,可以配合商家平台配置折扣活动,如果订单部分商品参与打折,可以将部分商品总价填写至此字段,默认全部商品可打折
  23. // 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
  24. //String discountableAmount = "1.00"; //
  25. // (可选) 订单不可打折金额,可以配合商家平台配置折扣活动,如果酒水不参与打折,则将对应金额填写至此字段
  26. // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
  27. $undiscountableAmount = "0.01";
  28. // 卖家支付宝账号ID,用于支持一个签约账号下支持打款到不同的收款账号,(打款到sellerId对应的支付宝账号)
  29. // 如果该字段为空,则默认为与支付宝签约的商户的PID,也就是appid对应的PID
  30. $sellerId = "";
  31. // 订单描述,可以对交易或商品进行一个详细地描述,比如填写"购买商品2件共15.00元"
  32. $body = "购买商品2件共15.00元";
  33. //商户操作员编号,添加此参数可以为商户操作员做销售统计
  34. $operatorId = "test_operator_id";
  35. // (可选) 商户门店编号,通过门店号和商家后台可以配置精准到门店的折扣信息,详询支付宝技术支持
  36. $storeId = "test_store_id";
  37. // 支付宝的店铺编号
  38. $alipayStoreId = "test_alipay_store_id";
  39. // 业务扩展参数,目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法),详情请咨询支付宝技术支持
  40. $providerId = ""; //系统商pid,作为系统商返佣数据提取的依据
  41. $extendParams = new ExtendParams();
  42. $extendParams->setSysServiceProviderId($providerId);
  43. $extendParamsArr = $extendParams->getExtendParams();
  44. // 支付超时,线下扫码交易定义为5分钟
  45. $timeExpress = "5m";
  46. // 商品明细列表,需填写购买商品详细信息,
  47. $goodsDetailList = array();
  48. // 创建一个商品信息,参数含义分别为商品id(使用国标)、名称、单价(单位为分)、数量,如果需要添加商品类别,详见GoodsDetail
  49. $goods1 = new GoodsDetail();
  50. $goods1->setGoodsId("good_id001");
  51. $goods1->setGoodsName("XXX商品1");
  52. $goods1->setPrice(3000);
  53. $goods1->setQuantity(1);
  54. //得到商品1明细数组
  55. $goods1Arr = $goods1->getGoodsDetail();
  56. // 继续创建并添加第一条商品信息,用户购买的产品为“xx牙刷”,单价为5.05元,购买了两件
  57. $goods2 = new GoodsDetail();
  58. $goods2->setGoodsId("good_id002");
  59. $goods2->setGoodsName("XXX商品2");
  60. $goods2->setPrice(1000);
  61. $goods2->setQuantity(1);
  62. //得到商品1明细数组
  63. $goods2Arr = $goods2->getGoodsDetail();
  64. $goodsDetailList = array($goods1Arr, $goods2Arr);
  65. //第三方应用授权令牌,商户授权系统商开发模式下使用
  66. $appAuthToken = "";//根据真实值填写
  67. // 创建请求builder,设置请求参数
  68. $barPayRequestBuilder = new AlipayTradePayContentBuilder();
  69. $barPayRequestBuilder->setOutTradeNo($outTradeNo);
  70. $barPayRequestBuilder->setTotalAmount($totalAmount);
  71. $barPayRequestBuilder->setAuthCode($authCode);
  72. $barPayRequestBuilder->setTimeExpress($timeExpress);
  73. $barPayRequestBuilder->setSubject($subject);
  74. $barPayRequestBuilder->setBody($body);
  75. $barPayRequestBuilder->setUndiscountableAmount($undiscountableAmount);
  76. $barPayRequestBuilder->setExtendParams($extendParamsArr);
  77. $barPayRequestBuilder->setGoodsDetailList($goodsDetailList);
  78. $barPayRequestBuilder->setStoreId($storeId);
  79. $barPayRequestBuilder->setOperatorId($operatorId);
  80. $barPayRequestBuilder->setAlipayStoreId($alipayStoreId);
  81. $barPayRequestBuilder->setAppAuthToken($appAuthToken);
  82. // 调用barPay方法获取当面付应答
  83. $barPay = new AlipayTradeService($config);
  84. $barPayResult = $barPay->barPay($barPayRequestBuilder);
  85. switch ($barPayResult->getTradeStatus()) {
  86. case "SUCCESS":
  87. echo "支付宝支付成功:" . "<br>--------------------------<br>";
  88. print_r($barPayResult->getResponse());
  89. break;
  90. case "FAILED":
  91. echo "支付宝支付失败!!!" . "<br>--------------------------<br>";
  92. if (!empty($barPayResult->getResponse())) {
  93. print_r($barPayResult->getResponse());
  94. }
  95. break;
  96. case "UNKNOWN":
  97. echo "系统异常,订单状态未知!!!" . "<br>--------------------------<br>";
  98. if (!empty($barPayResult->getResponse())) {
  99. print_r($barPayResult->getResponse());
  100. }
  101. break;
  102. default:
  103. echo "不支持的交易状态,交易返回异常!!!";
  104. break;
  105. }
  106. return;
  107. }
  108. ?>