怎么在ThinkPHP框架中使用支付宝支付功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
根据“快速接入”中的流程,两者大同小异,都是进行:
第一步:创建应用并获取APPID
第二步:配置密钥
第三步:搭建和配置开发环境
第四步:调用接口
虽然官方文档已经做的很详细、成熟,不过还是有几点需要着重提醒一下,以免不必要的纠结。
应用创建成功后需要大概一到三天的审核
配置密钥时建议下载其提供的加密工具,可参考RSA密钥生成方法
此处我所下载的是开发平台服务端SDK中的PHP版资源,而非DEMO文件,相信两者还是有所区别的
如下图所示,我在此创建了一个简单的入口文件,根据开发文档中的介绍是需要统一编码格式的,此处我选择的是UTF-8
需要注意的是,接口指明需要POST方式进行提交请求
对于支付宝的配置信息,我写在 Application/Common/Conf/config.php中
//支付宝 支付配置
'ALI_CONFIG' => array(
'gatewayUrl' => 'https://openapi.alipay.com/gateway.do',//支付宝网关(固定)'
'appId' => '2017xxxxxxxx9',//APPID即创建应用后生成
//由开发者自己生成: 请填写开发者私钥去头去尾去回车,一行字符串
'rsaPrivateKey' => 'MIIExxxxxxxxxxxxxxxxxxxxxxxxxxxq',
//支付宝公钥,由支付宝生成: 请填写支付宝公钥,一行字符串
'alipayrsaPublicKey' => 'IIBxxxxxxxxxxxxxxxxxxxEFAA',
'notifyUrl' => 'http://www.xxx.com/m/cartpay/notify_ali', // 支付成功通知地址
'returnUrl' => 'http://www.xxx.com', // 支付后跳转地址
'returnPcUrl' => 'http://www.xxx.com/Home', // PC端扫码支付后跳转地址
),
将前面所下载的SDK放入自定义的位置,在此,我习惯放在如下的路径中,…\ThinkPHP\Library\Vendor\Alipay,特别提醒一点,对于各文件类的引用会依据代码框架而不同,需要自行确认。
提示
通过实验发现,如果在电脑端进行此功能的支付测试,会报出如下的类似错误,个人认为源于手机和PC的内置配置不同
对于手机网站支付需要在手机上测试,可自行配置虚拟域名手机访问即可,不要在此问题上花费不必要的时间
因为本人就是在电脑有报错,手机端访问却能完美实现,从而走了验证签名的过程到最后却并非错在签名,当然也不排除你的操作过程签名一定是没问题的哦.
![]()
/**
* 支付宝支付post提交页面
*/
public function alipay(){
if (IS_POST){
Vendor('Alipay.aop.AopClient');
Vendor('Alipay.aop.request.AlipayTradeWapPayRequest');
//$out_trade_no = I('post.order_sn');
/*
* $out_trade_no 为自己业务逻辑中要支付的订单号
* 可从POST数据中提取,具体安全起见可自行加密操作 此处仅举例测试数据
* $order_amount 为要进行支付的金额 注意要用小数转换
* 例如:3.50,10.00
* $aliConfig 获取支付宝配置数据
*/
$out_trade_no = '2017M'.time();
$body = '欢迎购买商品,愿您购物愉快';
$subject = '你好';
$order_amount = 9.00;
$aliConfig = C('ALI_CONFIG');
$aop = new \AopClient();
$aop->gatewayUrl = $aliConfig['gatewayUrl'];
$aop->appId = $aliConfig['appId'];
$aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
$aop->alipayrsaPublicKey=$aliConfig['alipayrsaPublicKey'];
$aop->apiVersion = '1.0';
$aop->postCharset='UTF-8';
$aop->format='json';
$aop->signType='RSA2';
$request = new \AlipayTradeWapPayRequest ();
$bizContent = "{" .
" \"body\":\"$body.\"," .
" \"subject\":\"$subject\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"timeout_express\":\"90m\"," .
" \"total_amount\":$order_amount," .
" \"product_code\":\"QUICK_WAP_WAY\"" .
" }";
$request->setBizContent($bizContent);
$request->setNotifyUrl($aliConfig['notifyUrl']);
$request->setReturnUrl($aliConfig['returnUrl']);
$result = $aop->pageExecute ( $request);
echo $result;
}else{
echo 'sorry,非法请求失败';
}
}
此时,通过获取所提交过来的post数据,进行订单号的剥离,从而进行下一步的业务逻辑处理即可.
[注意]:
接口文档中有点明,支付通知功能最后需要输出‘success'
此处的通知路径要与配置中确定的 ‘notifyUrl'完全一致
/**
* 支付宝支付通知功能
*/
public function notify_ali(){
$out_trade_no = I('post.out_trade_no');
$this->toUpdatePayInfo($out_trade_no,'ali');
echo 'success';
}
对比来看,其实 PC 端的代码设计与手机端大同小异,在此点明一下使用情景,可进行参考。
提示:
测试发现,接口中定义“subject”时,对于文字的数目有要求,不能超过四个字,至于字母似乎没有特别限制,开发过程中原想显示全部的商品名称却无法实现,还请注意。
提供的代码暂时未进行界面的设计,可参考 手机端接口思想,接收并处理订单信息后再唤醒支付宝,当前的代码可以在公共文件配置正确的情况下,直接公网访问接口链接即可展示效果。
支付成功后的通知处理,请参考手机端实现方式.
/**
* 电脑端唤醒 支付宝扫码支付接口
*/
public function aliPayPage(){
$out_trade_no = '2017PC'.time();
$order_amount = '12.88';
$proName = "真米黑米 XXXXXX";
Vendor('Alipay.aop.AopClient');
Vendor('Alipay.aop.request.AlipayTradePagePayRequest');
//构造参数
$aop = new \AopClient();
$aliConfig = C('ALI_CONFIG');
$aop->gatewayUrl = $aliConfig['gatewayUrl'];
$aop->appId = $aliConfig['appId'];
$aop->rsaPrivateKey = $aliConfig['rsaPrivateKey'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset= 'utf-8';
$aop->format='json';
$request = new \AlipayTradePagePayRequest ();
$request->setReturnUrl($aliConfig['returnPcUrl']);
$request->setNotifyUrl($aliConfig['notifyUrl']);
$request->setBizContent(
"{" .
" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," .
" \"subject\":\"$proName\"," .
" \"out_trade_no\":\"$out_trade_no\"," .
" \"total_amount\":$order_amount," .
" \"body\":\"Iphone6 16G\"" .
" }");
//请求
$result = $aop->pageExecute ($request);
//输出
echo $result;
}
thinkphp属于一种免费的开发框架,能够用于开发前端网页,最早thinkphp是为了简化开发而产生的,thinkphp同时也是遵循Apache2协议,最初是从Struts演变过来,也把国外一些好的框架模式进行利用,使用面向对象的开发结构,兼容了很多标签库等模式,它能够更方便和快捷的开发和部署应用,当然不仅仅是企业级应用,任何php应用开发都可以从thinkphp的简单、兼容和快速的特性中受益。
看完上述内容,你们掌握怎么在ThinkPHP框架中使用支付宝支付功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。