网站接入支付宝/微信支付教程:从零到成功收款

对于面向国内用户的网站,支付宝和微信支付是必不可少的支付方式。相比 Stripe 等国际支付平台,国内支付的接入流程稍复杂,但一旦配置完成,支付体验非常流畅。

一、接入前的准备工作

1.1 所需资质

支付方式 所需资质 说明
支付宝 企业营业执照(或个体工商户) 个人版功能受限
微信支付 企业营业执照(或个体工商户) 个人版部分功能不可用

注意:2026 年支付宝和微信支付均已收紧个人商户的申请条件,建议使用企业资质申请。

1.2 网站要求

  • 已完成 ICP 备案
  • 已启用 HTTPS
  • 有完整的商品/服务页面
  • 有明确的退款和售后政策

二、支付宝接入

2.1 注册与认证

  1. 登录 支付宝开放平台
  2. 创建应用 → 选择"网页/移动应用"
  3. 填写应用基本信息(应用名称、应用图标等)
  4. 配置接口加签方式(推荐 RSA2)
  5. 提交审核(通常 1-3 个工作日)

2.2 获取关键参数

// 支付宝关键配置参数
$config = [
    'app_id' => '202100...',
    'merchant_private_key' => 'MIIEv...', // 商户私钥
    'alipay_public_key' => 'MIIBI...',    // 支付宝公钥
    'notify_url' => 'https://yourdomain.com/alipay/notify',
    'return_url' => 'https://yourdomain.com/alipay/return',
    'charset' => 'UTF-8',
    'sign_type' => 'RSA2',
    'gateway_url' => 'https://openapi.alipay.com/gateway.do',
];

2.3 发起支付请求

// 使用支付宝 SDK(PHP 示例)
$aop = new AopClient();
$aop->gatewayUrl = $config['gateway_url'];
$aop->appId = $config['app_id'];
$aop->rsaPrivateKey = $config['merchant_private_key'];
$aop->alipayrsaPublicKey = $config['alipay_public_key'];

$request = new AlipayTradePagePayRequest();
$request->setNotifyUrl($config['notify_url']);
$request->setReturnUrl($config['return_url']);
$request->setBizContent(json_encode([
    'out_trade_no' => 'ORDER_' . time(),
    'product_code' => 'FAST_INSTANT_TRADE_PAY',
    'total_amount' => '99.99',
    'subject' => '商品名称',
]));

$result = $aop->pageExecute($request);
// 输出 $result,用户会被重定向到支付宝收银台

三、微信支付接入

3.1 注册与认证

  1. 登录 微信支付商户平台
  2. 提交商户资料(营业执照、法人身份证、银行账户信息)
  3. 完成账户验证(打款验证或法人人脸识别)
  4. 签署协议后获得商户号

3.2 配置参数

微信支付比支付宝多一个 APIv3 密钥的配置:

// 微信支付 Node.js 示例
const wechatPay = {
  appid: 'wx...',         // 公众号/小程序 AppID
  mchid: '123000...',     // 商户号
  apiV3Key: '...',         // APIv3 密钥
  serialNo: '...',         // 证书序列号
  notifyUrl: 'https://yourdomain.com/wechat/notify',
};

3.3 Native 支付(适用于 PC 网站)

// 生成支付二维码
const { code_url } = await wechatPay.native({
  description: '商品名称',
  out_trade_no: 'ORDER_' + Date.now(),
  amount: {
    total: 9999,  // 金额单位:分(¥99.99)
    currency: 'CNY',
  },
});

// 前端展示二维码
// 使用 qrcode.js 将 code_url 转为二维码展示
// 轮询查询支付状态

3.4 JSAPI 支付(适用于移动端)

// 获取用户的 openid(需要 OAuth2 授权)
// 然后发起 JSAPI 支付
const payment = await wechatPay.jsapi({
  description: '商品名称',
  out_trade_no: 'ORDER_' + Date.now(),
  amount: { total: 9999, currency: 'CNY' },
  payer: { openid: userOpenId },
});

// 前端调起支付
WeixinJSBridge.invoke('getBrandWCPayRequest', payment, (res) => {
  if (res.err_msg === 'get_brand_wcpay_request:ok') {
    // 支付成功
  }
});

四、支付通知处理

4.1 支付宝异步通知

// 验证通知签名
$aop = new AopClient();
$result = $aop->rsaCheckV1($_POST, $config['alipay_public_key'], 'RSA2');

if ($result && $_POST['trade_status'] == 'TRADE_SUCCESS') {
    // 更新订单状态
    $orderId = $_POST['out_trade_no'];
    updateOrderStatus($orderId, 'paid');
    
    echo 'success'; // 告诉支付宝已收到通知
}

4.2 微信支付回调

app.post('/wechat/notify', async (req, res) => {
  try {
    const { id, event_type, resource } = req.body;
    
    if (event_type === 'TRANSACTION.SUCCESS') {
      const orderId = resource.out_trade_no;
      updateOrderStatus(orderId, 'paid');
    }
    
    res.json({ code: 'SUCCESS', message: '成功' });
  } catch (error) {
    res.status(500).json({ code: 'FAIL', message: error.message });
  }
});

五、费用对比

项目 支付宝 微信支付
费率 0.6%-1.2% 0.6%-1.0%
行业标准费率 0.6%(多数行业) 0.6%(多数行业)
提现手续费 免费 免费
退款手续费 不退 不退
结算周期 T+1 T+1

六、常见问题

申请被拒的原因

最常见的原因:营业执照信息不完整、网站未备案、经营范围与申请类型不匹配。建议仔细阅读平台要求,确保资质齐全。

支付回调没有收到

  • 检查 notify_url 是否可以公网访问
  • 确认没有 IP 白名单限制
  • 查看服务器日志,确保能正常接收 POST 请求
  • 在支付宝/微信商户后台查看回调记录

双通道同时集成

建议同时在网站提供支付宝和微信支付选项。也可以使用第三方聚合支付(如收钱吧、利楚扫呗)一次对接支持两个渠道。

七、总结

国内支付接入虽然流程上比 Stripe 繁琐,但对于面向国内用户的网站是必须的。建议同时接入支付宝和微信支付,覆盖超过 95% 的国内移动支付用户。如果技术资源有限,也可以考虑使用第三方支付服务商提供的聚合支付 SDK,一次接入即可支持多个支付渠道。