php 判断 $_get 然后跳转到相印的网站,TP3.2合并支付宝手机网页网站支付(最简单、直接用、报错:订单参数异常,请重新下单后再发起付款(ALIN42273))...

1、支付宝开发平台商户认证

2、创建应用:https://docs.open.alipay.com/203/107084/

创建应用的时候,有个问题,就是关于这个回调地址、应用网关,翻了文档也没看到具体的参数说明。

网上有人说:

单纯的支付接口是不需要配置这两个信息的,简单来说就是:应用网关是用于接收口碑或是生活号的信息的,授权回调地址是第三方授权或是用户信息授权使用的,如果用不到是可以不配置的!

参考地址:https://blog.csdn.net/sinat_32575213/article/details/79713654

3、支付宝文档中说先下载SDK,其实可以直接跳过,直接下载DEMO,直接改来用,下面就放完整个的流程代码

先看下DEMO的结构:

bde5f1fa2ca350ee0e0969e30f9187be.png

合并到TP的结构

b8462febc00cbc22c454992fb0538b36.png

右边是原文件,圈起来的三个文件可以删除掉(也可以不删),直接放到TP的config.php和具体的控制器里面。

1、TP项目的config.php配置文件

'ALIPAY_CONFIG'=>array(

//应用ID,您的APPID。

'app_id' => "自己创建应用的appid",//正式

// 'app_id' => "自己沙盒的appid",//沙盒

//商户私钥,您的原始格式RSA私钥

'merchant_private_key' => "填自己的私钥",

//异步通知地址

'notify_url' => '',//在方法里填,也可以在这里填

//同步跳转

'return_url' => '',//在方法里填,也可以在这里填

//编码格式

'charset' => "UTF-8",

//签名方式

'sign_type'=>"RSA2",

//支付宝网关

'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//正式

// 'gatewayUrl' => "https://openapi.alipaydev.com/gateway.do",//沙盒

//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。

'alipay_public_key' => "填自己的",

),

2、前台:HTML点支付按钮页(根据逻辑调整)一定要同步POST

3、后台:请求控制器里的方法(alipayPost支付请求方法,alipayNotifyUrl异步通知方法--直接复制DEMO的,alipayReturnUrl同步反回方法--直接复制DEMO)

/**

* 支付宝支付请求

*/

public function alipayPost(){

// 支付宝生成订单

Vendor('AlipayPHPWebPay.wappay.service.AlipayTradeService');

Vendor('AlipayPHPWebPay.wappay.buildermodel.AlipayTradeWapPayContentBuilder');

$config = C('ALIPAY_CONFIG');//支付宝配置信息

$config['return_url']=$this->url.CONTROLLER_NAME.'/';//同步跳转

$config['notify_url']=$this->url.CONTROLLER_NAME.'/alipayNotifyUrl';//异步通知地址

$requestData=$_POST;

if (!empty($requestData['WIDout_trade_no']) && trim($requestData['WIDout_trade_no']) != "") {

//超时时间

$timeout_express = "1m";

$payRequestBuilder = new \AlipayTradeWapPayContentBuilder();

$payRequestBuilder->setBody($requestData['WIDbody']);

$payRequestBuilder->setSubject($requestData['WIDsubject']);

$payRequestBuilder->setOutTradeNo($requestData['WIDout_trade_no']);

$payRequestBuilder->setTotalAmount($requestData['WIDtotal_amount']);

$payRequestBuilder->setTimeExpress($timeout_express);

$payResponse = new \AlipayTradeService($config);

$result = $payResponse->wapPay($payRequestBuilder, $config['return_url'], $config['notify_url']);

}

}

/**

* 功能:支付宝服务器异步通知页面

* 版本:2.0

* 修改日期:2016-11-01

* 说明:

* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

*************************页面功能说明*************************

* 创建该页面文件时,请留心该页面文件中无任何HTML代码及空格。

* 该页面不能在本机电脑测试,请到服务器上做测试。请确保外部可以访问该页面。

* 如果没有收到该页面返回的 success 信息,支付宝会在24小时内按一定的时间策略重发通知

*/

public function alipayNotifyUrl(){

$res=$_POST;//支付成功的信息

$subOrderInfo = M('记录表')->where(array('字段' => $res['out_trade_no']))->find();

if ($subOrderInfo['status'] >= 1) {

exit;

}

if(!empty($subOrderInfo)){

$saveData = array(

'request_trade_no' => $res['trade_no'],//支付宝订单

'pay_time' => time(),

'status' => 1,

);

M('记录表')->where(array('字段' => $res['out_trade_no']))->save($saveData);

//这里写自己系统的逻辑处理,然后返回

$this->selfAjaxReturn(true,'提交成功!',array(),U('模块/控制器/方法'));

}else{

exit();

}

}

/**

* 功能:支付宝页面跳转同步通知页面

* 版本:2.0

* 修改日期:2016-11-01

* 说明:

* 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。

*************************页面功能说明*************************

* 该页面可在本机电脑测试

* 可放入HTML等美化页面的代码、商户业务逻辑程序代码

*/

public function alipayReturnUrl(){

$res=$_GET;//支付成功的信息

$subOrderInfo = M('记录表')->where(array('字段' => $res['out_trade_no']))->find();

if(!empty($subOrderInfo) && $subOrderInfo['status']<1){

$saveData = array(

'request_trade_no' => $res['trade_no'],//支付宝订单

'pay_time' => time(),

'status' => 1,

);

M('记录表')->where(array('字段' => $res['out_trade_no']))->save($saveData);

//这里写自己系统的逻辑处理,然后返回

$this->assign('输出字段',$subOrderInfo['字段']);

}

$this->display();

}

前端支付返回HTML(layer.js是引用了layui的框架的):主要思路是在同步的HTML中,做异步再请求后台,这样就可以弹窗,也可以直接自己定下个模态框显示

XXXXX

4、修改DEMO的相应文件和一些注意事项,不然会报错,

Vendor\AlipayPHPWebPay\wappay\service\AlipayTradeService.php文件

324d9f5bbaa18caf6ec7ab8a8a49f8e7.png

Vendor\AlipayPHPWebPay\lotusphp_runtime\shortcut.php文件C方法跟TP的重复了)

59c79f9fdf960fa2c5d31f59a2dc878d.png

DEMO有个坑,参数不正确,支付宝官网文档上写的请求参数是 product_code (https://docs.open.alipay.com/203/107090/)

Vendor\AlipayPHPWebPay\wappay\buildermodel\AlipayTradeWapPayContentBuilder.php文件

a7d86033c9a4481bd032fcfd45cb5bb2.png

还有要注意金额的格式,这个也是容易错的

9d6dc2f0e548419ebe8b2f419fb898a6.png

以上是在沙盒环境测过没有问题,由于应用要审核,如果有别的BUG,大家自行搜索就好,先解决大问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值