日志最近使用支付宝网页充值功能,记录下使用的过程,用的是php yii框架。因为时间紧,文档没有详细的看过,按照给的例子直接移过来使用,后续了解深入了可以完善。
1、文档的地址https://docs.open.alipay.com/203,可以直接下载php版本的支付宝文件。
2、把下载下来的文件放到项目vendor下面,新建alipay文件,把一下文件复制过去。
把.DS_Store的文件删除掉,其余的可以不用修改。再在新的项目中添加一个配置文件,配置app_id,公钥,私钥,异步和同步地址等。可以写在config文件夹中如下:
在params文件中引入alipay.php,然后复制给一个参数
这样访问alipay_config就可以访问到配置的公钥,私钥,同步异步地址,app_id等信息,格式如下:
Controller和view页面按照正常的流程创建,渲染。调用ali支付的时候写一个AlipayController文件,来处理阿里的回调函数等。
<?php namespace app\modules\webpay\controllers; use Yii; use yii\db\Query; use yii\filters\AccessControl; use yii\filters\VerbFilter; use yii\web\Controller; use app\models\Curl; require_once Yii::$app->basePath."/vendor/alipay/wappay/buildermodel/AlipayTradeWapPayContentBuilder.php"; require_once Yii::$app->basePath."/vendor/alipay/wappay/service/AlipayTradeService.php"; ?>
首先要引入阿里的文件,一个是服务器处理一个是网页支付 主要代码如下
<?php /** * 支付宝 */ public function Zhifubao($data){ //实例化Builder对象 $alipay = new \AlipayTradeWapPayContentBuilder(); //商品描述,可空 $order_desc = "充值"; //订单名称,必填 $order_name = "充值"; //商户订单号,商户网站订单系统中唯一订单号,必填 //$order_id = date("YmdHis",time()).$serid; $order_id = $data['order_id']; //付款金额,必填 $order_amount = $data['money']; //超时时间 $order_timeout = "1m"; //给Builder对象赋值 $alipay->setBody($order_desc); $alipay->setSubject($order_name); $alipay->setOutTradeNo($order_id); $alipay->setTotalAmount($order_amount); $alipay->setTimeExpress($order_timeout); //配置信息 $config = Yii::$app->params['alipay_config']; //实例化service对象,需传入配置信息 $serverObj = new \AlipayTradeService($config); //执行支付 $result = $serverObj->wapPay($alipay,$config['return_url'],$config['notify_url']); return; } ?>
这样就可以调起支付宝页面。前提是配置一定要配置好,接下来就是异步处理函数和同步函数处理的逻辑。
注:放到线上ngnix服务器,出现的意外事件
默认的日志路径没权利写,解决办法:修改路径,写一个有权限的路径文件。
异步处理有一个支付宝验证函数,可以验证是否是本人支付
<?php //异步通知 public function actionNotifyinfo(){ $data = Yii::$app->request->post(); //配置信息 $config = Yii::$app->params['alipay_config']; //实例化service对象,需传入配置信息 $serverObj = new \AlipayTradeService($config); //验证是否为支付宝返回结果 $rst = $serverObj->check($data); if ($rst){ //处理逻辑 echo "success"; }else{ echo "fail"; } } ?>
以上这些都是网页充值流程,有空以后完善。知其然也要知其所以然。。。。欢迎各位前来拍砖。