一,说明:本帖将利用官方提供的demo进行修改成沙箱的环境demo,小伙伴如果测试沙箱报错可以自己下载这个里面的demo进行配置自己的沙箱APPID和公私钥测试即可。截图示例以php版的为例,其他开发语言的配置方法一样。
二,测试准备工作 1.登录沙箱地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info 需要使用(如下图)说明 2.demo中需要配置(如下图) 3.下载沙箱demo运行测试即可。 三,demo下载地址: 1.当面付demo php版:F2FPay_Demo_php.zip 官方demo版本(2017-11-10更新,内含沙箱账号,可以直接测试):dangmianfu_demo_php.zip 沙箱列表demo会在后续中更新,敬请期待,如果对demo有疑问或者demo有问题欢迎在帖子下面提问或拍砖 ![]() |
BEN | 2016-10-16 19:46:15
![]() 希望能出下教程介绍下php如何配置手机网站支付,我测试了下,总是报错,alipay.conf.php中的几个参数不是很确定,PID就是沙箱里的UID吗,还有沙箱网关和APPID需要吗,该填在哪里? |
我是个导演 | 2016-10-17 09:22:28
BEN:终于成功了一次,感谢手机网站有两个:一个是手机网站1.0(alipay.wap.create.direct.pay.by.user)和手机网站2.0接口(alipay.trade.wap.pay) 1.手机网站1.0(alipay.wap.create.direct.pay.by.user)接口需要使用的是pid+私钥 不支持沙箱环境 2.手机网站2.0接口(alipay.trade.wap.pay) 需要使用的是appid+私钥 支持沙箱环境 手机网站的沙箱网关和appid和当面付接口的配配置方法一样 |
我是个导演 | 2016-11-28 08:58:22
|
鹰翔于野 | 2016-12-21 21:39:40
为毛里面没有异步通知文件 PHP服务端版里面也没有
还有授权回调地址指向服务端哪个文件获取支付宝发来的CODE 然后是传递给那个文件换取令牌? |
我是个导演 | 2016-12-22 09:17:37
鹰翔于野:为毛里面没有异步通知文件 PHP服务端版里面也没有1.异步通知文件 我问题,当面付只有扫码支付是有异步通知的,传异步地址的方法如下(php为例)。接收验签和其他接口相同 2.第二个问题看我的这个贴子:https://openclub.alipay.com/read.php?tid=458&fid=5&page=1#1172 |
鹰翔于野 | 2017-01-01 20:37:50
我是个导演:1.异步通知文件 我问题,当面付只有扫码支付是有异步通知的,传异步地址的方法如下(php为例)。接收验签和其他接口相同这个异步通知文件要怎么写 收银台二维码支付成功后收不到回调的信息。 ![]() |
鹰翔于野 | 2017-01-03 11:12:14
<?php
/* * * 功能:支付宝服务器异步通知页面 * 版本:3.3 * 日期:2012-07-23 * 说明: * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 * 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。 *************************页面功能说明************************* * 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。 * 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。 * 该页面调试工具请使用写文本函数logResult,该函数已被默认关闭,见alipay_notify_class.php中的函数verifyNotify * 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知 */ require_once("alipay.config.php"); require_once("lib/alipay_notify.class.php"); //计算得出通知验证结果 $alipayNotify = new AlipayNotify($alipay_config); $verify_result = $alipayNotify->verifyNotify(); if($verify_result) {//验证成功 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //请在这里加上商户的业务逻辑程序代 //——请根据您的业务逻辑来编写程序(以下代码仅作参考)—— //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表 //解析notify_data //注意:该功能PHP5环境及以上支持,需开通curl、SSL等PHP配置环境。建议本地调试时使用PHP开发软件 $doc = new DOMDocument(); if ($alipay_config['sign_type'] == 'MD5') { $doc->loadXML($_POST['notify_data']); } if ($alipay_config['sign_type'] == '0001') { $doc->loadXML($alipayNotify->decrypt($_POST['notify_data'])); } if( ! empty($doc->getElementsByTagName( "notify" )->item(0)->nodeValue) ) { //商户订单号 $out_trade_no = $doc->getElementsByTagName( "out_trade_no" )->item(0)->nodeValue; //支付宝交易号 $trade_no = $doc->getElementsByTagName( "trade_no" )->item(0)->nodeValue; //交易状态 $trade_status = $doc->getElementsByTagName( "trade_status" )->item(0)->nodeValue; if($trade_status == 'TRADE_FINISHED') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在两种情况下出现 //1、开通了普通即时到账,买家付款成功后。 //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); echo "success"; //请不要修改或删除 } else if ($trade_status == 'TRADE_SUCCESS') { //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //如果有做过处理,不执行商户的业务程序 //注意: //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。 //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); echo "success"; //请不要修改或删除 } } //——请根据您的业务逻辑来编写程序(以上代码仅作参考)—— ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// } else { //验证失败 echo "fail"; //调试用,写文本函数记录程序运行情况是否正常 //logResult("这里写入想要调试的代码变量值,或其他运行的结果记录"); } ?> 文件是这样的。。notifyUrl 也填了但是二维码支付成功后手机上显示支付成功 PC上收不到返回来支付成功的消息 |
鹰翔于野 | 2017-01-04 13:26:25
执行日期:20170104131831
responseTxt=true notify_url_log:isSign=false,buyer_id=2088702756533152&total_amount=0.01&trade_no=2017010421001004150220538328&body=购买商品2件共15.00元¬ify_time=2017-01-04 13:18:31&open_id=20881025446162214462200721511115&subject=订单&sign_type=RSA&buyer_logon_id=133****8635&auth_app_id=2015042800051183&charset=UTF-8¬ify_type=trade_status_sync&out_trade_no=200013&trade_status=WAIT_BUYER_PAY&version=1.0&sign=Yj5We9Myapx2dpQa/1a5iowbV82vfRM9yAprzlC1A6BdKJz5WvGUhNprr4DOsHKBrVSnroc7hvbu89SypGr4VGAnPtkt27FjNia7Pf+pouchaTsUPqWmnuy8Qp4kgSUXkkAKGy7VsKjr2q7hdh8IyKb38WWdILgocAUn+moh9kg=&gmt_create=2017-01-04 13:18:30&app_id=2016120603934539&seller_id=2088911510032114¬ify_id=4e168b7cea8b3d5e197d7b1a08bdeceh5q 执行日期:20170104131845 responseTxt=true notify_url_log:isSign=false,body=购买商品2件共15.00元&open_id=20881025446162214462200721511115&subject=订单&sign_type=RSA&buyer_logon_id=133****8635&auth_app_id=2015042800051183¬ify_type=trade_status_sync&out_trade_no=200013&point_amount=0.00&version=1.0&fund_bill_list=[{"amount":"0.01","fundChannel":"ALIPAYACCOUNT"}]&total_amount=0.01&buyer_id=2088702756533152&trade_no=2017010421001004150220538328¬ify_time=2017-01-04 13:18:45&charset=UTF-8&invoice_amount=0.01&trade_status=TRADE_SUCCESS&gmt_payment=2017-01-04 13:18:45&sign=Tkh5Km35IIslHhKIg9jKPtAurgNvOGv11+u74R7KRNUoPYJeGk9LURHu6azdk9n2yMY5QbyQh3vgUmR5qt5mO6rwki8SrOfmyoYPexEMC9oNhWUjG1biaDO6T6rkX9+BHBlE/+OmGKY0Bxov+j8mz6iZgropUQ2OFn3Zx0iaUNQ=&gmt_create=2017-01-04 13:18:30&buyer_pay_amount=0.01&receipt_amount=0.01&seller_id=2088911510032114&app_id=2016120603934539¬ify_id=f063564ed3923de8bca972193d17931h5q 上面的是打开log notify_url记录的日志 删除了&seller_email= 线上环境 notify_url的地址公网可访问显示:fail 商户订单:200013 支付宝订单:2017010421001004150220538328 |
鹰翔于野 | 2017-01-04 13:49:19
就是Demo 里面这样传异步,异步地址:http://pay.gxwlgc.com/admin/pay/wappay/notify_url.php //当面付2.0预下单(生成二维码,带轮询) public function qrPay($req) { $bizContent = $req->getBizContent(); $this->writeLog($bizContent); $request = new AlipayTradePrecreateRequest(); $request->setBizContent ( $bizContent ); $request->setNotifyUrl ( $this->notify_url ); // 首先调用支付api $response = $this->aopclientRequestExecute ( $request, NULL ,$req->getAppAuthToken() ); $response = $response->alipay_trade_precreate_response; $result = new AlipayF2FPrecreateResult($response); if(!empty($response)&&("10000"==$response->code)){ $result->setTradeStatus("SUCCESS"); } elseif($this->tradeError($response)){ $result->setTradeStatus("UNKNOWN"); } else { $result->setTradeStatus("FAILED"); } return $result; } public function query($queryContentBuilder) { $biz_content = $queryContentBuilder->getBizContent(); $this->writeLog($biz_content); $request = new AlipayTradeQueryRequest(); $request->setBizContent ( $biz_content ); $response = $this->aopclientRequestExecute ( $request , NULL, $queryContentBuilder->getAppAuthToken() ); return $response->alipay_trade_query_response; } // 轮询查询订单支付结果 protected function loopQueryResult($queryContentBuilder){ $queryResult = NULL; for ($i=1;$i<$this->MaxQueryRetry;$i++){ try{ sleep($this->QueryDuration); }catch (Exception $e){ print $e->getMessage(); exit(); } $queryResponse = $this->query($queryContentBuilder); if(!empty($queryResponse)){ if($this->stopQuery($queryResponse)){ return $queryResponse; } $queryResult = $queryResponse; } } return $queryResult; } // 判断是否停止查询 protected function stopQuery($response){ if("10000"==$response->code){ if("TRADE_FINISHED"==$response->trade_status|| "TRADE_SUCCESS"==$response->trade_status|| "TRADE_CLOSED"==$response->trade_status){ return true; } } return false; } // 根据查询结果queryResponse判断交易是否支付成功,如果支付成功则更新result并返回,如果不成功则调用撤销 private function checkQueryAndCancel($outTradeNo, $appAuthToken, $result, $queryResponse){ if($this->querySuccess($queryResponse)){ // 如果查询返回支付成功,则返回相应结果 $result->setTradeStatus("SUCCESS"); $result->setResponse($queryResponse); return $result; }elseif($this->queryClose($queryResponse)){ // 如果查询返回交易关闭,标记交易失败 $result->setTradeStatus("FAILED"); return $result; } // 如果查询结果不为成功,则调用撤销 $cancelContentBuilder = new AlipayTradeCancelContentBuilder(); $cancelContentBuilder->setAppAuthToken($appAuthToken); $cancelContentBuilder->setOutTradeNo($outTradeNo); $cancelResponse = $this->cancel($cancelContentBuilder); if($this->tradeError($cancelResponse)){ // 如果第一次同步撤销返回异常,则标记支付交易为未知状态 $result->setTradeStatus("UNKNOWN"); }else{ // 标记支付为失败,如果撤销未能成功,产生的单边帐由人工处理 $result->setTradeStatus("FAILED"); } return $result; } // 查询返回“支付成功” protected function querySuccess($queryResponse){ return !empty($queryResponse)&& $queryResponse->code == "10000"&& ($queryResponse->trade_status == "TRADE_SUCCESS"|| $queryResponse->trade_status == "TRADE_FINISHED"); } // 查询返回“交易关闭” protected function queryClose($queryResponse){ return !empty($queryResponse)&& $queryResponse->code == "10000"&& $queryResponse->trade_status == "TRADE_CLOSED"; } // 交易异常,或发生系统错误 protected function tradeError($response){ return empty($response)|| $response->code == "20000"; } public function cancel($cancelContentBuilder) { $biz_content= $cancelContentBuilder->getBizContent(); $this->writeLog($biz_content); $request = new AlipayTradeCancelRequest(); $request->setBizContent ( $biz_content ); $response = $this->aopclientRequestExecute ( $request ,NULL ,$cancelContentBuilder->getAppAuthToken() ); return $response->alipay_trade_cancel_response; } |
我的回复
您需要登录后才可以回帖,
登录
|
- 回复数
- 36
- 阅读数
- 27731