lvht / php-alipay by lvht

支付宝移动无线产品服务端工具包
29
9
3
Package Data
Maintainer Username: lvht
Maintainer Contact: git@lvht.net (吕海涛)
Package Create Date: 2014-11-09
Package Last Update: 2015-03-12
Language: PHP
License: MIT
Last Refreshed: 2024-11-22 03:00:45
Package Statistics
Total Downloads: 29
Monthly Downloads: 1
Daily Downloads: 0
Total Stars: 9
Total Watchers: 3
Total Forks: 6
Total Open Issues: 0

支付宝快捷支付服务端工具包

最近做的一个小项目用到了支付宝快捷支付,整理了一下服务端的代码。 希望大家少走弯路。

功能特性

  • 生成移动sdk商品信息字符串
  • 验证并解析支付宝异步通知(仅RSA签名)
  • 提供 Laravel 集成支持
  • 目前仅支持必选字段

使用方法

安装

composer require lvht/alipay

生成sdk商品信息参数示例:

<?php
$alipay = new Lv\Alipay\SdkPayment;
// 设置商家合作id
$alipay->setPartner('2088xxxx')
    // 设置商家私钥
    ->setPrivateKey(file_get_contents(__DIR__ . '/rsa_private_key.pem'))
    // 设置支付宝公钥
    ->setPublicKey(file_get_contents(__DIR__ . '/alipay_public_key.pem'))
    // 设置异步通知链接
    ->setNotifyUrl('http://api.xxx.cn/alipay-confirmation')
    // 设置商品标题
    ->setSubject('XXXX咨询费')
    // 设置商品详情
    ->setBody('XXXX咨询费')
    // 设置商家订单号
    ->setOutTradeNo("123")
    // 设置商家支付宝账号
    ->setSellerId('18170@163.com')
    // 设置支付费用
    ->setTotalFee('0.01');

$info = $alipay->getPayInfo();

解析支付宝异步通知:

<?php
$ali_pub_key = file_get_contents(__DIR__ . '/alipay_public_key.pem');
// POST原始数据
// 通过 file_get_contents('php://stdin') 获取
// 此处为方便测试,我们将获取的内容存入文件
$post_data = file_get_contents(__DIR__ . '/notify_raw_post.txt');

$alipay = new Lv\Alipay\SdkPayment;
$alipay->setPublicKey($ali_pub_key);
$data = $alipay->getNotifyInfo($post_data);

Laravel 集成

app/config/app.php中添加

'providers' => array(
    'Lv\Alipay\AlipayServiceProvider',
)

创建app/config/pay.php,内容如下:

<?php
return [
    'ali' => [
        // 合作标识
        'partner_id'         => '2088xxx',
        // 商户私钥
        'rsa_private_key'    => file_get_contents('path/to/key.pem'),
        // 阿里公钥
        'ali_rsa_public_key' => file_get_contents('path/to/ali_key.pem'),
        // 商品名称
        'subject'            => 'XXX咨询费',
        // 商品详情
        'body'               => 'XXX咨询费',
        // 收款账号
        'account'            => '18170557321@163.com',
        // 异步通知连接
        'notify_url'         => 'http://api.xxx.cn/alipay-confirmation',
    ],
];

注意,支付宝的公钥文件内容为(来自支付宝官方示例程序包):

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRA
FljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQE
B/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5Ksi
NG9zpgmLCUYuLkxpLQIDAQAB
-----END PUBLIC KEY-----

商户私钥文件格式如下:

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCVSuqRO99TThu8gM1drM8ayF2EtjK8vcYRjSjIa0GD1q6aC2i+
yc+artdGcWkr9JqXeScnCgi9F0w0r+e0pp2EBVPuNkbWzDRcpPvC/eSSHVauc+zs
0krjhTGoHZRvrXuCAqqjD878Eb5QiOGgpupneTjivMH3dQP9gPQ5lIkMUQIDAQAB
AoGASxgM1xLbqaZ/Uxkis7zJy/n++FNBQCjg6VEss2sn4C3rU3brsBQJBhBuHnPL
aB24aPq60+s7LAn8/f+BOCAa2Fm6E7XGTVLlCD4DQKnwz3PxUC1zJPfjQ1RBwSw/
Hc7Ry7Ihmm4LlMvFAHDhAwcm/sxCkIh1IysJdBH2LnNJTgUCQQDF262IP8/YmhvZ
76qrIvYuZt4yD7wIypsz1+aExwwSuamZZ4GE4FhCT+SyrcI7+T8A8l8uFip6hJo1
wR65A2tbAkEAwSnKkB0K3yz6stZdqabsN94JYG2B1rGEHElCIPs49IZ6v4+2
FXOefQFPtV/BH9788lK50TRcGiuywwJBAKJg5GzSOejAqSTVvZJP0gxI3gfl
w+LPLEqC4KuNk8n2V0sPmEsNt0FMwhsl4SdJKbzELPrstBXyp4CAKo+aT8sCQQCo
PLXofuMRLiPLz1kUggYLQp/4FGiZjVL7L/Mgtq4Mi3QtlAX0OVEcwVzsQh8v0QyT
dCrIj3bPt62PwILXaGfxAkEAp1TzjiWA+aAj+CIOyASwZUxwLO+RnUW7tXc6hWnQ
NoIGoCo2hkC8FeJjIZ8Du9V0itcDEwYr2rsm5J1/8YXuQQ==
-----END RSA PRIVATE KEY-----

Enjoy it!