日志最近使用支付宝网页充值功能,记录下使用的过程,用的是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";
}
}
?>
以上这些都是网页充值流程,有空以后完善。知其然也要知其所以然。。。。欢迎各位前来拍砖。