All Projects → mytharcher → Alipay Php Sdk

mytharcher / Alipay Php Sdk

支付宝即时到账 SDK 简化版(含移动网页支付)

Labels

Projects that are alternatives of or similar to Alipay Php Sdk

Alipay Sdk Python All
支付宝开放平台 Alipay SDK for Python
Stars: ✭ 174 (-43.51%)
Mutual labels:  alipay, sdk
Alipay Easysdk
Alipay Easy SDK for multi-language(java、c#、php、ts etc.) allows you to enjoy a minimalist programming experience and quickly access the various high-frequency capabilities of the Alipay Open Platform.
Stars: ✭ 559 (+81.49%)
Mutual labels:  alipay, sdk
Alipay Sdk Java All
支付宝开放平台 Alipay SDK for Java
Stars: ✭ 210 (-31.82%)
Mutual labels:  alipay, sdk
Alipay Sdk Net All
支付宝开放平台 Alipay SDK for .NET
Stars: ✭ 77 (-75%)
Mutual labels:  alipay, sdk
React Native Alipay
Alipay SDK for React Native. Support RN >= 0.47.
Stars: ✭ 191 (-37.99%)
Mutual labels:  alipay, sdk
Pay
支付 SDK 的集合与重构,支持支付宝、微信支付、银联支付。
Stars: ✭ 198 (-35.71%)
Mutual labels:  alipay, sdk
Sdk3rd
第三方SDK集成库,授权/分享/支付
Stars: ✭ 249 (-19.16%)
Mutual labels:  alipay, sdk
Easybluetooth
一款iOS BLE蓝牙调试工具,非常简单容易,也可以作为一个蓝牙库,快速集成和开发。 可以两步搞定蓝牙开发操作。 第一步连接设备,第二步特征读写数据。
Stars: ✭ 282 (-8.44%)
Mutual labels:  sdk
Alan Sdk Ionic
Alan AI Ionic SDK adds a voice assistant or chatbot to your app. Supports React, Angular.
Stars: ✭ 287 (-6.82%)
Mutual labels:  sdk
Phnt
Native API header files for the Process Hacker project.
Stars: ✭ 276 (-10.39%)
Mutual labels:  sdk
Ijpay
IJPay 让支付触手可及,封装了微信支付、QQ支付、支付宝支付、京东支付、银联支付、PayPal 支付等常用的支付方式以及各种常用的接口。不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。右上角点下小星星✨
Stars: ✭ 3,561 (+1056.17%)
Mutual labels:  alipay
Qiskit Terra
Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and algorithms.
Stars: ✭ 3,177 (+931.49%)
Mutual labels:  sdk
Swiftscan
A barcode and qr code scanner( 二维码/条形码扫描、生成,仿微信、支付宝)
Stars: ✭ 293 (-4.87%)
Mutual labels:  alipay
Assistants Pi
Headless Google Assistant and Alexa on Raspberry Pi
Stars: ✭ 280 (-9.09%)
Mutual labels:  sdk
Cloudinary angular
Cloudinary Angular client library
Stars: ✭ 305 (-0.97%)
Mutual labels:  sdk
React Native Puti Pay
基于 React Native 的微信支付,支付宝支付插件
Stars: ✭ 277 (-10.06%)
Mutual labels:  alipay
Togetherad
🔥持续更新。Android广告聚合:帮助 Android 开发者快速、便捷、灵活的接入国内多家主流安卓广告 SDK。广点通(优量汇)、穿山甲、百青藤(百度Mob)。开屏广告、Banner横幅广告、插屏广告、激励广告、原生信息流、全屏广告。
Stars: ✭ 305 (-0.97%)
Mutual labels:  sdk
Msgraph Sdk Php
Microsoft Graph Library for PHP.
Stars: ✭ 302 (-1.95%)
Mutual labels:  sdk
Ble examples
Additional examples to compliment TI's Bluetooth Low Energy Stack offerings.
Stars: ✭ 289 (-6.17%)
Mutual labels:  sdk
Alipayzerosdk
Lightest Alipay Transfer Helper - 最轻量的支付宝转账工具类(Android)
Stars: ✭ 286 (-7.14%)
Mutual labels:  alipay

支付宝即时到账 SDK 简化版(含移动网页支付)

该项目精简和重构了官方的 SDK 开发包,将签名参数和验证返回合并在一个类里,仅一个文件,引入方便,调用简单。

适用范围

  • 即时到账支付(含移动网页版)
  • 各类 PHP 项目(含各种框架)
  • 有一定 PHP 项目经验(能 debug 类库源码)的开发者

使用方式

Composer 包

$ composer require mytharcher/alipay-php-sdk

或者在已有composer.json中添加:

"require": {
	"mytharcher/alipay-php-sdk": "dev-master"
}

普通引入

  1. 下载项目代码,将Alipay.phpcacert.pem放置到项目的合适位置;
  2. 如果使用移动端签名需要同时下载alipay_public_key.pem到合适位置
  3. 使用框架加载第三方类库方法,或者直接引入Alipay.php

支付前

支付前需要将订单相关数据按支付宝的接口规则准备好,并在客户端生成表单由用户发起支付提交。

桌面版和移动网页版接口不同,需要由两种方式生成数据。

注意,桌面版和移动版需要自行根据userAgent进行判断(推荐:Mobile Detect)。

桌面版

引入类库后,创建一个实例,调用buildRequestForm方法来生成支付表单:

$alipay = new Alipay(array(/* config */));

$body = $alipay->buildRequestFormHTML(array(
	'out_trade_no'      => $order['id'],
	'subject'	        => '杜蕾斯xx',
	'total_fee'         => $order['price'],
	'body'              => $order['category']['name'],
	'show_url'          => 'http://'.$_SERVER['HTTP_HOST'].'/product/xx',
	'anti_phishing_key' => '',
	'exter_invoke_ip'   => '',
	'it_b_pay'          => $this->setting['paymentTimeout'] / 60 . 'm',
	'_input_charset'    => $this->config->item('input_charset', 'alipay')
));

// 输出 HTML 到浏览器,JS 会自动发起提交
echo $body;

移动网页

移动网页版初始化实例时需要传入第二个参数wap表明是移动版网页支付:

$alipay = new Alipay(array(/*...*/), 'wap');

在生成提交表单之前需要一个额外的步骤,调用prepareMobileTradeData方法会在后端发起一次预支付提交到支付宝服务器,并准备好要生成的参数,提交参数也略有不同:

$params = $alipay->prepareMobileTradeData(array(
	'out_trade_no' => $order['id']
	'subject'	   => '杜蕾斯xx',
	'body'         => $order['category']['name'],
	'total_fee'    => $order['price'],
	'merchant_url' => 'http://'.$_SERVER['HTTP_HOST'].'/product/xx',
	'req_id'       => date('Ymdhis-').$order['id']
))

// 移动网页版接口只支持 GET 方式提交
$body = $alipay->buildRequestFormHTML($params, 'get');

有时候需要适配微信内的支付跳转,由于双方竞争关系导致无法自动跳转(参见:《关于微信公众平台无法使用支付宝收付款的解决方案说明》),则可以不生成表单,直接使用$params参数数组在页面生成支付链接,提示用户用浏览器打开支付。

支付后

支付后不再区分桌面版和移动网页版,都可以调用统一的接口验证返回信息。唯一区别是分为同步异步两种方式,而且这两种方式会根据收到的请求数据自动判断完成,使用者无需关心。

$alipay = new Alipay(array(/* config... */));
// 获得验证结果 true/false
$result = $alipay->verifyCallback();

调用接口后根据结果取值进行后续的业务处理,如订单成功支付完成,或者支付失败等。

注意:正常情况下,支付宝的异步通知模式会比返回更早调用,在业务处理中需要考虑重复调用的情况。

APP支付 服务端生成签名以及验签

移动APP签名支持 RSA

注意:rsa签名验签时的公钥是支付提供的,不是自己生成rsa签名时生成的公钥

//以下配置必须
$config['sign_type'] = 'RSA';
$config['private_key_path'] = '';//rsa私钥路径


$alipay = new Alipay(/* config... */,'app');
$params = array(
    'out_trade_no' => 324242342342,
    'subject' => '主题 产品名称',,
    'total_fee' => '0.01',,
    '_input_charset' => 'utf-8',
    'sign_type' => 'RSA'
);
$paramStr = $alipay->buildSignedParametersForApp(/*$params*/); //此代码可以直接给APP端提交

验签:

$config['sign_type'] = 'RSA';
$alipay = new Alipay(/* config... */,'app');
// 获得验证结果 true/false
$result = $alipay->verifyCallback();

API

主要的几个方法如下:

new Alipay($config = array(), $type='')

  • $config 配置数组
  • $type wap 移动网页支付 /app 移动APP /其他PC支付

构造方法,创建支付对象实例。

参数$config:支付配置数组,可用参数列表:

array(
	// 即时到账方式
	'payment_type' => 1,
	// 传输协议
	'transport' => 'http',
	// 编码方式
	'input_charset' => 'utf-8',
	// 签名方法
	'sign_type' => 'MD5',
	// 支付完成异步通知调用地址
	'notify_url' => 'http://'.$_SERVER['HTTP_HOST'.'>/order/callback_alipay/notify',
	// 支付完成同步返回地址
	'return_url' => 'http://'.$_SERVER['HTTP_HOST'.'>/order/callback_alipay/return',
	// 证书路径
	'cacert' => APPPATH.'third_party/alipay/cacert.pem',
	// 支付宝商家 ID
	'partner'      => '2088xxxxxxxx',
	// 支付宝商家 KEY
	'key'          => 'xxxxxxxxxxxx',
	// 支付宝商家注册邮箱
	'seller_email' => '[email protected]'
)

参数$is_mobile:当前是否是移动支付,默认FALSE(需要使用者自行判断,见前文)。

buildSignedParameters(array(/*params*/))

根据交易信息创建准备提交的已签名参数组。主要用于自定义生成提交信息页面,当不需要按标准方式输出自动提交表单时,可以通过该方法准备好要提交的参数,自行处理提交页面。

$params = $alipay->buildSignedParameters(array(/*params*/));

参数见“支付前”部分。

buildRequestFormHTML(array(/*params*/))

根据交易信息创建自动提交表单的 HTML 内容。参数同上。

// 向客户端页面输出所有要提交的参数表单内容
echo $alipay->buildRequestFormHTML($params);

prepareMobileTradeData(array(/*params*/))

移动网页版准备提交数据。由于移动网页支付分为两个步骤,第一步在后端向支付宝服务器发起一次预提交,获取 token,之后才由客户端带着 token 一起提交准备完成的参数。

$params = $alipay->prepareMobileTradeData(array(/*params*/));
// 将准备好的参数生成表单输出到客户端自动提交
echo $alipay->buildRequestFormHTML($params);

verifyCallback()

对支付完成返回结果的验证。合并了异步通知模式和同步返回模式的参数验证,均可通过调用此接口完成。且是否是移动模式也会自动判断。

$alipay = new Alipay(array(/* config */));
// 获得验证结果 true/false
$result = $alipay->verifyCallback();

大多数情况使用这几个接口就可以完成支付,其他子功能详见源码中相应函数注释。

吐槽

懒得吐槽原来的接口代码了。

MIT Licensed

-EOF-

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].