支付宝App支付调试

628 阅读3分钟

支付宝调试

使用扩展包辅助开发:github.com/yansongda/p…

支付宝异步回调结果文档:opendocs.alipay.com/open/203/10…

支付宝唤起请求参数说明:opendocs.alipay.com/open/204/10…

该扩展包,实现了支付宝、微信相关的常见操作,比如:App支付、转账、扫码支付、小程序支付等等,使用很简单,跟着文档走遍就明白了,踩的坑多数是 配置相关的坑,多数可通过搜索解决。

安装

composer require yansongda/pay -vvv

配置说明

文件路径:config/pay.php

'alipay'     => [
        'notify_url'     => 'http://staging.youjianqi.com/api/alipay/notify',
        'return_url'     => 'http://staging.youjianqi.com/api/alipay/return',
        'app_id'         => '2021001160653660',
        'private_key'    => '填入应用的密钥',
        'ali_public_key' => '填入支付宝公钥',
			  'log'	 => [ // optional
          'file' => './logs/alipay.log',
          'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
          'type' => 'single', // optional, 可选 daily.
          'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
		    ],
        'http'                => [
            'timeout'         => 30,
            'connect_timeout' => 30,
        ],
        'mode'                => 'normal',
    ],
  • Appid: 必填,支付宝分配的引用id
  • notify_url:用户操作成功后,暴露给支付宝的回调接口
  • return_url:跳转的页面url,用户支付成功后跳转的url
  • private_key:支付宝应用私钥
  • ali_public_key:支付宝分配的公钥,不是应用公钥
  • mode:应用环境,线上启用normal模式,开发使用 dev 进入沙箱模式

实际演练

生成签名给前端,唤起支付宝需要

public function resolveGenerateOrder($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo)
    {
        $order = [
            'out_trade_no' => time(),
            'total_amount' => '0.01',
            'subject'      => 'test subject-测试订单',
        ];

        $alipay = Pay::alipay(config('pay.yjq_alipay'));
        // 将返回字符串,供后续 APP 调用,调用方式不在本文档讨论范围内,请参考官方文档。
        return ($alipay->app($order)->getContent());
        // return  // laravel 框架中请直接 return $alipay->app($order)

    }
  • Total_amount:支付金额
  • Subject:支付时显示的标题
  • out_trade_no:我们提供的交易号(id),我们自己生成传入

回调Controller

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Yansongda\Pay\Pay;

class PayController extends Controller
{
    public function alipayNotify(Request $request)
    {
        $data = $request->all();
        info('notify' . json_encode($data));
      	// 需要注意,alipay中的ali_public_key需要是支付宝公钥,而不是应用公钥
        $result = Pay::alipay(config('pay.yjq_alipay'))->verify();
        info('result' . $result);

    }

    public function alipayReturn(Request $request)
    {
        $data = $request->all();
        info('return' . json_encode($data));
    }
}

支付宝回调数据

{
    "gmt_create":"2020-06-05 18:42:34",
    "charset":"utf-8",
    "seller_email":"jinlinle@haxibiao.com",
    "subject":"test subject-测试订单",
 "sign":"VWyCeJ+4YrvnvV3DodRpE6zS+gdmNQBGjyZAmxZeh2w7B/QxdjzgU2j+c5uiXi0cFHOeRBhXpgyM/KImMwcWMr8ozvKFYo+pMMeWFogf+R3VDGU9cnahFbNIEdUPn9O1kdncYwZzMjfQvNKehnqfqr5iOzzePx096BXwWfCzJFwb3PcSvP3aXStLFAIhYq9q9rNBrdg3OUFLp4Ww12/8S1Chm2tCl0U/h4g2vHQ1K9AeU1x0un6Qd6Et/f+bU9gPF6CnjUTtNjOksUFy5vGxsmnpYJc5r0Deq2pf1b0eHpOhlqyf9DdSZx8Yx99zLJ7VvGZzpqk+rb4CvBE7zFWdnw==",
    "buyer_id":"2088222691542159",
    "invoice_amount":"0.01",
    "notify_id":"2020060500222184235042151451122226",
    "fund_bill_list":"[{"amount":"0.01","fundChannel":"PCREDIT"}]",
    "notify_type":"trade_status_sync",
    "trade_status":"TRADE_SUCCESS",
    "receipt_amount":"0.01",
    "app_id":"2021001160653660",
    "buyer_pay_amount":"0.01",
    "sign_type":"RSA2",
    "seller_id":"2088231973528275",
    "gmt_payment":"2020-06-05 18:42:35",
    "notify_time":"2020-06-05 22:09:12",
    "version":"1.0",
    "out_trade_no":"1591353731",
    "total_amount":"0.01",
    "trade_no":"2020060522001442151437413220",
    "auth_app_id":"2021001160653660",
    "buyer_logon_id":"138****2286",
    "point_amount":"0.00"
}

关键参数:trade_status,代表交易状态。

交易状态 解释
TRADE_FINISHED 交易结束,不可退款
TRADE_SUCCESS 交易完成,交易支付成功
WAIT_BUYER_PAY 交易创建,等待付款
TRADE_CLOSED 未付款交易超时关闭,或支付完成后全额退款

参数:fund_bill_list中的 amount , fundChannel 代表订单金额和支付渠道

支付渠道代码 支付渠道
COUPON 支付宝红包
ALIPAYACCOUNT 支付宝余额
POINT 集分宝
DISCOUNT 折扣券
PCARD 预付卡
FINANCEACCOUNT 余额宝
MCARD 商家储值卡
MDISCOUNT 商户优惠券
MCOUPON 商户红包
PCREDIT 蚂蚁花呗

上面的支付案例,是使用蚂蚁花呗支付。

结尾

本次使用的成熟的扩展包辅助开发,多数踩坑是配置信息导致,好在这些问题搜索可以有结果,所以开发不困难。