> Tplay 2.0集成了微信支付和支付宝支付,使用起来也非常简单。
>
**配置**
支付宝支付所需的相关配置在app/config.php文件中
~~~
// +----------------------------------------------------------------------
// | 支付宝支付设置
// +----------------------------------------------------------------------
'alipay'=>[
//应用ID,您的APPID。
'app_id' => "",
//商户私钥, 请把生成的私钥文件中字符串拷贝在此
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "",
//同步跳转
'return_url' => "",
//编码格式
'charset' => "UTF-8",
//签名方式
'sign_type'=>"RSA2",
//支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do",
//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "",
],
~~~
微信支付的相关配置则需要在/entend/wxpay/lib/WxPayConfig.php中进行配置
~~~
<?php
/**
* 配置账号信息
*/
class WxPayConfig
{
//=======【基本信息设置】=====================================
//
/**
* TODO: 修改这里配置为您自己申请的商户信息
* 微信公众号信息配置
*
* APPID:绑定支付的APPID(必须配置,开户邮件中可查看)
*
* MCHID:商户号(必须配置,开户邮件中可查看)
*
* KEY:商户支付密钥,参考开户邮件设置(必须配置,登录商户平台自行设置)
* 设置地址:https://pay.weixin.qq.com/index.php/account/api_cert
*
* APPSECRET:公众帐号secert(仅JSAPI支付的时候需要配置, 登录公众平台,进入开发者中心可设置),
* 获取地址:https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=2005451881&lang=zh_CN
* @var string
*/
const APPID = '';
const MCHID = '';
const KEY = '';
const APPSECRET = '';
// ======【开发模式与生产模式】===================================
/**
* 微信支付需要获取用户的真实ip, 本地开发就需要设定一个固定的IP,
* 处于生产模式, 请务必将次改为false, 用于获取用户真实IP!!!!
*/
const WXPAY_DEBUG = true;
//=======【异步通知地址】=====================================
const NOTIFY_URL = '';
/********************* 以下配置不建议修改 *********************/
//=======【证书路径设置】=====================================
/**
* TODO:设置商户证书路径
* 证书路径,注意应该填写绝对路径(仅退款、撤销订单时需要,可登录商户平台下载,
* API证书下载地址:https://pay.weixin.qq.com/index.php/account/api_cert,下载之前需要安装商户操作证书)
* @var path
*/
const SSLCERT_PATH = EXTEND_PATH.'/wxpay/cert/apiclient_cert.pem';
const SSLKEY_PATH = EXTEND_PATH.'/wxpay/cert/apiclient_key.pem';
//=======【curl代理设置】===================================
/**
* TODO:这里设置代理机器,只有需要代理的时候才设置,不需要代理,请设置为0.0.0.0和0
* 本例程通过curl使用HTTP POST方法,此处可修改代理服务器,
* 默认CURL_PROXY_HOST=0.0.0.0和CURL_PROXY_PORT=0,此时不开启代理(如有需要才设置)
* @var unknown_type
*/
const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
const CURL_PROXY_PORT = 0;//8080;
//=======【上报信息配置】===================================
/**
* TODO:接口调用上报等级,默认紧错误上报(注意:上报超时间为【1s】,上报无论成败【永不抛出异常】,
* 不会影响接口调用流程),开启上报之后,方便微信监控请求调用的质量,建议至少
* 开启错误上报。
* 上报等级,0.关闭上报; 1.仅错误出错上报; 2.全量上报
* @var int
*/
const REPORT_LEVENL = 1;
// ======【日志文件目录】===================================
const WXPAY_LOG = RUNTIME.'/wxpay';
}
~~~
**调用**
微信支付及支付宝支付的接口调用实例均位于app/api/controller目录下,分别是Wxpay.php和Alipay.php
微信支付接口调用示例:
~~~
<?php
namespace app\api\controller;
class Wxpay extends \think\Controller
{
// 扫码支付
public function index()
{
$params = [
'body' => '支付测试',
'out_trade_no' => mt_rand().time(),
'total_fee' => 1,
'product_id' => time(),
];
$result = \wxpay\NativePay::getPayImage($params);
echo $result;
}
// 公众号支付
public function jspay()
{
$params = [
'body' => '支付测试',
'out_trade_no' => mt_rand().time(),
'total_fee' => 1,
];
$result = \wxpay\JsapiPay::getPayParams($params);
halt($result);
}
// 小程序支付
public function smallapp()
{
$params = [
'body' => '支付测试',
'out_trade_no' => mt_rand().time(),
'total_fee' => 1,
];
$code = '08123gA41K4EQO1RH1B41uP2A4123gAW';
$result = \wxpay\JsapiPay::getPayParams($params, $code);
$openId = 'oCtoK0SjxW-N5qjEDgaMyummJyig';
$result = \wxpay\JsapiPay::getParams($params, $openId);
}
// 刷卡支付
public function micropay()
{
$params = [
'body' => '支付测试',
'out_trade_no' => mt_rand().time(),
'total_fee' => 1,
];
$auth_code = '134628839776154108';
$result = \wxpay\MicroPay::pay($params, $auth_code);
halt($result);
}
// H5支付
public function wappay()
{
$params = [
'body' => '支付测试',
'out_trade_no' => mt_rand().time(),
'total_fee' => 1,
];
$result = \wxpay\WapPay::getPayUrl($params);
halt($result);
}
// 订单查询
public function query()
{
$out_trade_no = '290000985120170917160005';
$result = \wxpay\Query::exec($out_trade_no);
halt($result);
}
// 退款
public function refund()
{
$params = [
'out_trade_no' => '290000985120170917160005',
'total_fee' => 1,
'refund_fee' => 1,
'out_refund_no' => time()
];
$result = \wxpay\Refund::exec($params);
halt($result);
}
// 退款查询
public function refundquery()
{
$order_no = '290000985120170917160005';
$result = \wxpay\RefundQuery::exec($order_no);
halt($result);
}
// 下载对账单
public function download()
{
$result = \wxpay\DownloadBill::exec('20170923');
echo($result);
}
// 通知测试
public function notify()
{
$notify = new \wxpay\Notify();
$notify->Handle();
}
}
~~~
支付宝支付接口调用示例:
~~~
<?php
namespace app\api\controller;
class Alipay extends \think\Controller
{
public function index()
{
/**
* 电脑网站支付
* @param array $params 支付参数, 具体如下
* @param string $params['subject'] 订单标题
* @param string $params['out_trade_no'] 订单商户号
* @param float $params['total_amount'] 订单金额
*/
\alipay\Pagepay::pay($params);
/**
* 手机网站支付
* @param array $params 支付参数, 具体如下
* @param string $params['subject'] 订单标题
* @param string $params['out_trade_no'] 订单商户号
* @param float $params['total_amount'] 订单金额
*/
\alipay\Wappay::pay($params);
/**
* 交易查询接口
* 商户订单号(out_trade_no) or 支付宝交易号(trade_no) 二选一
*/
\alipay\Query::exec($query_no);
/**
* 交易退款接口
* @param array $params 退款参数, 具体如下
* @param string $params['trade_no']/$params['out_trade_no'] 商户订单号或支付宝单号其中之一
* @param string $params['out_request_no'] 商户退款号(可选, 如同一笔交易多次退款, 则必填)
* @param float $params['refund_amount'] 退款金额
*/
\alipay\Refund::exec($params);
/**
* 退款统一订单查询
* @param array $params 退款查询参数, 具体如下:
* @param string $params['trade_no']/$params['out_trade_no'] 商户订单号或支付宝单号其中之一
* @param string $params['out_request_no'] 可空, 为空时, 退款号为订单号
*/
\alipay\RefundQuery::exec($params);
/**
* 交易关闭接口
* 商户订单号(out_trade_no) or 支付宝交易号(trade_no) 二选一
*/
\alipay\Close::exec($query_no);
/**
* 查询账单下载地址接口
* @param string $bill_type trade/signcustomer, trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单;
* @param string $bill_date 日期, 单格式为yyyy-MM-dd,月账单格式为yyyy-MM
* 注意:
* 1.当日或者当月日期为无效日期,毕竟没有过当日或者当月
* 2.如果是2017年7月,请填写2017-07,不能为2017-7
*/
\alipay\Datadownload::exec($bill_type, $bill_date);
/**
* 验签
* 异步通知校检, 包括验签和数据库信息与通知信息对比
* @param array $params 数据库中查询到的订单信息
* @param string $params['out_trade_no'] 商户订单
* @param float $params['total_amount'] 订单金额
*/
\alipay\Notify::check($params);
// 通知处理步骤建议
// 验签
// 判断订单状态
// 进行业务操作
}
}
~~~