🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> 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); // 通知处理步骤建议 // 验签 // 判断订单状态 // 进行业务操作 } } ~~~