写这篇文章是为了方便初次接触支付功能的朋友能够更快入手简单支付逻辑,希望能少走歪路。
注:本文所提供代码仅为后端核心代码片段,
本文采用的严嵩达支付的SDK进行调用
【记得很多刚入行的都喜欢问:为什么不手搓原生?】
答:首先最主要的是安全问题,你手搓封装的代码,每一步都需要打上日志,且需要根据每一步的返回参数进行解析和返回值的调试,不单单原生访问方式需要自行编写加密,对于调用和反参状态值都需要对其进行记载,往往SDK中的一句调用,可能就需要你用2-3天进行手搓,可能还存在安全隐患和反参处理不全面。
其次是时间问题,一个从零开始的项目,一般可行的demo都要求你一个月内完成。
其三是付出和收获不成正比,因为通常这类封装都是可以从 官方API文档中找到调用文章,你手搓一遍只能学到一些封装和代码处理方面的知识,而这些知识你在独立完成项目的过程中也能掌握。
1. 首先本文不提供支付宝及微信基础参数的获取方式,所需参数获取方式请自行查阅官方API文档一步步操作即可完成。
2. 将基础配置项封装到config文件中,密钥等重要信息请勿直接放在项目文件中,一定要放在env中进行调用
3. 封装的config示例
<?php
declare(strict_types=1);
use Yansongda\Pay\Pay;
return [
# 阿里配置
'alipay' => [
'default' => [
// 必填-支付宝分配的 app_id
'app_id' => env('ALIPAY_APP_ID'),
// 必填-应用私钥 字符串或路径
'app_secret_cert' => env('ALIPAY_APP_SECRET_CERT'),
// 必填-应用公钥证书 路径
'app_public_cert_path' => storage_path(env('ALIPAY_APP_PUBLIC_CERT_PATH')),
// 必填-支付宝公钥证书 路径
'alipay_public_cert_path' => storage_path(env('ALIPAY_APP_ALIPAY_PUBLIC_CERT_PATH')),
// 必填-支付宝根证书 路径
'alipay_root_cert_path' => storage_path(env('ALIPAY_APP_ALIPAY_ROOT_CERT_PATH')),
'return_url' => env('ALIPAY_APP_RETURN_URL'),
'notify_url' => env('ALIPAY_APP_NOTIFY_URL'),
// 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
'service_provider_id' => '',
// 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
'mode' => Pay::MODE_NORMAL,
]
],
'wechat' => [
'default' => [
// 必填-商户号,服务商模式下为服务商商户号
'mch_id' => env('RE_APP_MCH_ID'),
// 必填-商户秘钥
'mch_secret_key' => env('RE_APP_MCH_SECRET_KEY'),
// 必填-商户私钥 字符串或路径
'mch_secret_cert' => storage_path(env('RE_APP_MCH_SECRET_CERT')),
// 必填-商户公钥证书路径
'mch_public_cert_path' => storage_path(env('RE_APP_MCH_PUBLIC_CERT_PATH')),
// 必填
'notify_url' => env('RE_APP_NOTIFY_URL'),
// 选填-公众号 的 app_id
'mp_app_id' => env('RE_APP_APP_ID'),
// 选填-小程序 的 app_id
'mini_app_id' => '',
// 选填-app 的 app_id
'app_id' => env('RE_APP_APP_ID'),
// 选填