qrpay_test.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. require_once 'model/builder/AlipayTradePrecreateContentBuilder.php';
  4. require_once 'service/AlipayTradeService.php';
  5. if (!empty($_POST['out_trade_no'])&& trim($_POST['out_trade_no'])!=""){
  6. // (必填) 商户网站订单系统中唯一订单号,64个字符以内,只能包含字母、数字、下划线,
  7. // 需保证商户系统端不能重复,建议通过数据库sequence生成,
  8. //$outTradeNo = "qrpay".date('Ymdhis').mt_rand(100,1000);
  9. $outTradeNo = $_POST['out_trade_no'];
  10. // (必填) 订单标题,粗略描述用户的支付目的。如“xxx品牌xxx门店当面付扫码消费”
  11. $subject = $_POST['subject'];
  12. // (必填) 订单总金额,单位为元,不能超过1亿元
  13. // 如果同时传入了【打折金额】,【不可打折金额】,【订单总金额】三者,则必须满足如下条件:【订单总金额】=【打折金额】+【不可打折金额】
  14. $totalAmount = $_POST['total_amount'];
  15. // (不推荐使用) 订单可打折金额,可以配合商家平台配置折扣活动,如果订单部分商品参与打折,可以将部分商品总价填写至此字段,默认全部商品可打折
  16. // 如果该值未传入,但传入了【订单总金额】,【不可打折金额】 则该值默认为【订单总金额】- 【不可打折金额】
  17. //String discountableAmount = "1.00"; //
  18. // (可选) 订单不可打折金额,可以配合商家平台配置折扣活动,如果酒水不参与打折,则将对应金额填写至此字段
  19. // 如果该值未传入,但传入了【订单总金额】,【打折金额】,则该值默认为【订单总金额】-【打折金额】
  20. $undiscountableAmount = "0.01";
  21. // 卖家支付宝账号ID,用于支持一个签约账号下支持打款到不同的收款账号,(打款到sellerId对应的支付宝账号)
  22. // 如果该字段为空,则默认为与支付宝签约的商户的PID,也就是appid对应的PID
  23. //$sellerId = "";
  24. // 订单描述,可以对交易或商品进行一个详细地描述,比如填写"购买商品2件共15.00元"
  25. $body = "购买商品2件共15.00元";
  26. //商户操作员编号,添加此参数可以为商户操作员做销售统计
  27. $operatorId = "test_operator_id";
  28. // (可选) 商户门店编号,通过门店号和商家后台可以配置精准到门店的折扣信息,详询支付宝技术支持
  29. $storeId = "test_store_id";
  30. // 支付宝的店铺编号
  31. $alipayStoreId= "test_alipay_store_id";
  32. // 业务扩展参数,目前可添加由支付宝分配的系统商编号(通过setSysServiceProviderId方法),系统商开发使用,详情请咨询支付宝技术支持
  33. $providerId = ""; //系统商pid,作为系统商返佣数据提取的依据
  34. $extendParams = new ExtendParams();
  35. $extendParams->setSysServiceProviderId($providerId);
  36. $extendParamsArr = $extendParams->getExtendParams();
  37. // 支付超时,线下扫码交易定义为5分钟
  38. $timeExpress = "5m";
  39. // 商品明细列表,需填写购买商品详细信息,
  40. $goodsDetailList = array();
  41. // 创建一个商品信息,参数含义分别为商品id(使用国标)、名称、单价(单位为分)、数量,如果需要添加商品类别,详见GoodsDetail
  42. $goods1 = new GoodsDetail();
  43. $goods1->setGoodsId("apple-01");
  44. $goods1->setGoodsName("iphone");
  45. $goods1->setPrice(3000);
  46. $goods1->setQuantity(1);
  47. //得到商品1明细数组
  48. $goods1Arr = $goods1->getGoodsDetail();
  49. // 继续创建并添加第一条商品信息,用户购买的产品为“xx牙刷”,单价为5.05元,购买了两件
  50. $goods2 = new GoodsDetail();
  51. $goods2->setGoodsId("apple-02");
  52. $goods2->setGoodsName("ipad");
  53. $goods2->setPrice(1000);
  54. $goods2->setQuantity(1);
  55. //得到商品1明细数组
  56. $goods2Arr = $goods2->getGoodsDetail();
  57. $goodsDetailList = array($goods1Arr,$goods2Arr);
  58. //第三方应用授权令牌,商户授权系统商开发模式下使用
  59. $appAuthToken = "";//根据真实值填写
  60. // 创建请求builder,设置请求参数
  61. $qrPayRequestBuilder = new AlipayTradePrecreateContentBuilder();
  62. $qrPayRequestBuilder->setOutTradeNo($outTradeNo);
  63. $qrPayRequestBuilder->setTotalAmount($totalAmount);
  64. $qrPayRequestBuilder->setTimeExpress($timeExpress);
  65. $qrPayRequestBuilder->setSubject($subject);
  66. $qrPayRequestBuilder->setBody($body);
  67. $qrPayRequestBuilder->setUndiscountableAmount($undiscountableAmount);
  68. $qrPayRequestBuilder->setExtendParams($extendParamsArr);
  69. $qrPayRequestBuilder->setGoodsDetailList($goodsDetailList);
  70. $qrPayRequestBuilder->setStoreId($storeId);
  71. $qrPayRequestBuilder->setOperatorId($operatorId);
  72. $qrPayRequestBuilder->setAlipayStoreId($alipayStoreId);
  73. $qrPayRequestBuilder->setAppAuthToken($appAuthToken);
  74. // 调用qrPay方法获取当面付应答
  75. $qrPay = new AlipayTradeService($config);
  76. $qrPayResult = $qrPay->qrPay($qrPayRequestBuilder);
  77. // 根据状态值进行业务处理
  78. switch ($qrPayResult->getTradeStatus()){
  79. case "SUCCESS":
  80. echo "支付宝创建订单二维码成功:"."<br>---------------------------------------<br>";
  81. $response = $qrPayResult->getResponse();
  82. $qrcode = $qrPay->create_erweima($response->qr_code);
  83. echo $qrcode;
  84. print_r($response);
  85. break;
  86. case "FAILED":
  87. echo "支付宝创建订单二维码失败!!!"."<br>--------------------------<br>";
  88. if(!empty($qrPayResult->getResponse())){
  89. print_r($qrPayResult->getResponse());
  90. }
  91. break;
  92. case "UNKNOWN":
  93. echo "系统异常,状态未知!!!"."<br>--------------------------<br>";
  94. if(!empty($qrPayResult->getResponse())){
  95. print_r($qrPayResult->getResponse());
  96. }
  97. break;
  98. default:
  99. echo "不支持的返回状态,创建订单二维码返回异常!!!";
  100. break;
  101. }
  102. return ;
  103. }
  104. ?>
  105. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  106. <html>
  107. <head>
  108. <title>支付宝当面付 二维码支付</title>
  109. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  110. <style>
  111. *{
  112. margin:0;
  113. padding:0;
  114. }
  115. ul,ol{
  116. list-style:none;
  117. }
  118. .title{
  119. color: #ADADAD;
  120. font-size: 14px;
  121. font-weight: bold;
  122. padding: 8px 16px 5px 10px;
  123. }
  124. .hidden{
  125. display:none;
  126. }
  127. .new-btn-login-sp{
  128. border:1px solid #D74C00;
  129. padding:1px;
  130. display:inline-block;
  131. }
  132. .new-btn-login{
  133. background-color: transparent;
  134. background-image: url("../img/new-btn-fixed.png");
  135. border: medium none;
  136. }
  137. .new-btn-login{
  138. background-position: 0 -198px;
  139. width: 82px;
  140. color: #FFFFFF;
  141. font-weight: bold;
  142. height: 28px;
  143. line-height: 28px;
  144. padding: 0 10px 3px;
  145. }
  146. .new-btn-login:hover{
  147. background-position: 0 -167px;
  148. width: 82px;
  149. color: #FFFFFF;
  150. font-weight: bold;
  151. height: 28px;
  152. line-height: 28px;
  153. padding: 0 10px 3px;
  154. }
  155. .bank-list{
  156. overflow:hidden;
  157. margin-top:5px;
  158. }
  159. .bank-list li{
  160. float:left;
  161. width:153px;
  162. margin-bottom:5px;
  163. }
  164. #main{
  165. width:750px;
  166. margin:0 auto;
  167. font-size:14px;
  168. font-family:'宋体';
  169. }
  170. #logo{
  171. background-color: transparent;
  172. background-image: url("../img/new-btn-fixed.png");
  173. border: medium none;
  174. background-position:0 0;
  175. width:166px;
  176. height:35px;
  177. float:left;
  178. }
  179. .red-star{
  180. color:#f00;
  181. width:10px;
  182. display:inline-block;
  183. }
  184. .null-star{
  185. color:#fff;
  186. }
  187. .content{
  188. margin-top:5px;
  189. }
  190. .content dt{
  191. width:160px;
  192. display:inline-block;
  193. text-align:right;
  194. float:left;
  195. }
  196. .content dd{
  197. margin-left:100px;
  198. margin-bottom:5px;
  199. }
  200. #foot{
  201. margin-top:10px;
  202. }
  203. .foot-ul li {
  204. text-align:center;
  205. }
  206. .note-help {
  207. color: #999999;
  208. font-size: 12px;
  209. line-height: 130%;
  210. padding-left: 3px;
  211. }
  212. .cashier-nav {
  213. font-size: 14px;
  214. margin: 15px 0 10px;
  215. text-align: left;
  216. height:30px;
  217. border-bottom:solid 2px #CFD2D7;
  218. }
  219. .cashier-nav ol li {
  220. float: left;
  221. }
  222. .cashier-nav li.current {
  223. color: #AB4400;
  224. font-weight: bold;
  225. }
  226. .cashier-nav li.last {
  227. clear:right;
  228. }
  229. .alipay_link {
  230. text-align:right;
  231. }
  232. .alipay_link a:link{
  233. text-decoration:none;
  234. color:#8D8D8D;
  235. }
  236. .alipay_link a:visited{
  237. text-decoration:none;
  238. color:#8D8D8D;
  239. }
  240. </style>
  241. </head>
  242. <body text=#000000 bgColor="#ffffff" leftMargin=0 topMargin=4>
  243. <div id="main">
  244. <div id="head">
  245. <dl class="alipay_link">
  246. <a target="_blank" href="http://www.alipay.com/"><span>支付宝首页</span></a>|
  247. <a target="_blank" href="https://b.alipay.com/home.htm"><span>商家服务</span></a>|
  248. <a target="_blank" href="http://help.alipay.com/support/index_sh.htm"><span>帮助中心</span></a>
  249. </dl>
  250. <span class="title">支付宝统一预下单接口快速通道</span>
  251. </div>
  252. <div class="cashier-nav">
  253. <ol>
  254. <li class="current">1、确认信息 →</li>
  255. <li>2、点击确认 →</li>
  256. <li class="last">3、确认完成</li>
  257. </ol>
  258. </div>
  259. <form name=alipayment action="" method=post target="_blank">
  260. <div id="body" style="clear:left">
  261. <dl class="content">
  262. <dt>商户订单号:</dt>
  263. <dd>
  264. <span class="null-star">*</span>
  265. <input size="30" name="out_trade_no" />
  266. <span>商户网站订单系统中唯一订单号,必填
  267. </span>
  268. </dd>
  269. <dt>订单名称:</dt>
  270. <dd>
  271. <span class="null-star">*</span>
  272. <input size="30" name="subject" />
  273. <span>必填
  274. </span>
  275. </dd>
  276. <dt>付款金额:</dt>
  277. <dd>
  278. <span class="null-star">*</span>
  279. <input size="30" name="total_amount" />
  280. <span>必填
  281. </span>
  282. </dd>
  283. <dt></dt>
  284. <dd>
  285. <span class="new-btn-login-sp">
  286. <button class="new-btn-login" type="submit" style="text-align:center;">确 认</button>
  287. </span>
  288. </dd>
  289. </dl>
  290. </div>
  291. </form>
  292. <div id="foot">
  293. <ul class="foot-ul">
  294. <li><font class="note-help">如果您点击“确认”按钮,即表示您同意该次的执行操作。 </font></li>
  295. <li>
  296. 支付宝版权所有 2011-2015 ALIPAY.COM
  297. </li>
  298. </ul>
  299. </div>
  300. </div>
  301. </body>
  302. </html>