支付宝单笔转账支付功能
最近做了功能,涉及到了微信支付单笔转账功能,不得不说,支付宝的到款速度还是很给力。
首先必须要有去申请企业支付宝,这个东西需要营业执照,申请一般1-2天即可申请完毕,最后还会有个对公账号打款8.22元。现在我们主要说下程序方面的实现
第一,首先需要建立一个开发者应用,会分配你一个appid
2,进行相对应的功能应用进行签约,时间一般一天就可以通过
3,填写公钥,公钥这块用支付宝提供的工具生成即可。
4以上执行完毕后,我们就可以根据文档进行功能开发
5.请求地址 https://openapi.alipay.com/gateway.do
,通过文档,我们知道其实我们就把相应的参数(公共请求参数和请求参数)发给支付宝
6.支付宝接受到参数会给我们相应的反馈,在请求参数时,我们会把所有的请求参数json后放入到公共参数 biz_content中,具体参看下面代码
<?php
require_once '../zhifubao/Rsa.class.php';
require_once '../zhifubao/Base.class.php';
require_once '../zhifubao/Alipay.class.php';
//构建支付请求 可以传递MD5 RSA RSA2三种参数
$obj = new Alipay();$data = ['payee_account' => 'xxxxx', //收款方账户'amount' => 'xxxx', //金额
];//UTF-8格式的json数据
$res = iconv('gbk','utf-8',$obj->transfer($data));echo '<pre>';
//转换为数组
$res = json_decode($res,true);print_r($res);
alipay类
<?php
class Alipay extends Base
{const TRANSFER = 'https://openapi.alipay.com/gateway.do';public function __construct() {}//转账public function transfer($data){//公共请求参数$pub_params = ['app_id' => self::APPID,'method' => 'alipay.fund.trans.toaccount.transfer', //接口名称 应填写固定值alipay.fund.trans.toaccount.transfer'format' => 'JSON', //目前仅支持JSON'charset' => 'UTF-8','sign_type' => 'RSA2',//签名方式'sign' => '', //签名'timestamp' => date('Y-m-d H:i:s'), //发送时间 格式0000-00-00 00:00:00'version' => '1.0', //固定为1.0'biz_content' => '', //业务请求参数的集合];//请求参数$api_params = ['out_biz_no' => date('YmdHis'),//商户转账订单号'payee_type' => 'ALIPAY_LOGONID', //收款方账户类型'payee_account' => $data['payee_account'], //收款方账户'amount' => $data['amount'], //金额];$pub_params['biz_content'] = json_encode($api_params,JSON_UNESCAPED_UNICODE);$pub_params = $this->setRsa2Sign($pub_params);return $this->curlRequest(self::TRANSFER, $pub_params);}
}
Base类
<?php
class Base extends RSA
{
/**
* 以下信息需要根据自己实际情况修改
*/
//自己的私钥
const APPPRIKEY = 'xxxxx'; //修改成自己的 应用私钥
//申请到的APPID
const APPID = 'xxxxx';
//支付宝公钥,不是你自己生成的公钥
const NEW_ALIPUBKE ='xxxx'; //修改成自己的 支付宝公钥public function getStr($arr,$type = 'RSA'){//筛选if(isset($arr['sign'])){unset($arr['sign']);}if(isset($arr['sign_type']) && $type == 'RSA'){unset($arr['sign_type']);}//排序ksort($arr);//拼接return $this->getUrl($arr,false);
}
//将数组转换为url格式的字符串
public function getUrl($arr,$encode = true){if($encode){return http_build_query($arr);}else{return urldecode(http_build_query($arr));}
}//获取签名RSA2
public function getRsa2Sign($arr){return $this->rsaSign($this->getStr($arr,'RSA2'), self::APPPRIKEY,'RSA2') ;
}
//获取含有签名的数组RSA
public function setRsa2Sign($arr){$arr['sign'] = $this->getRsa2Sign($arr);return $arr;
}
public function checkSign($arr){if($this->getRsa2Sign($arr) == $arr['sign']){return true;}else{return false;}
}public function curlRequest($url,$data = ''){$ch = curl_init();$params[CURLOPT_URL] = $url; //请求url地址$params[CURLOPT_HEADER] = false; //是否返回响应头信息$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回$params[CURLOPT_FOLLOWLOCATION] = true; //是否重定向$params[CURLOPT_TIMEOUT] = 30; //超时时间if(!empty($data)){$params[CURLOPT_POST] = true;$params[CURLOPT_POSTFIELDS] = $data;}$params[CURLOPT_SSL_VERIFYPEER] = false;//请求https时设置,还有其他解决方案$params[CURLOPT_SSL_VERIFYHOST] = false;//请求https时,其他方案查看其他博文curl_setopt_array($ch, $params); //传入curl参数$content = curl_exec($ch); //执行curl_close($ch); //关闭连接return $content;
}}
rsa 验证类
<?php
class RSA
{
/**
* RSA签名
* @param $data 待签名数据
* @param $private_key 私钥字符串
* return 签名结果
*/
function rsaSign($data, $private_key,$type = 'RSA') {$search = [
"-----BEGIN RSA PRIVATE KEY-----",
"-----END RSA PRIVATE KEY-----",
"\n",
"\r",
"\r\n"
];$private_key=str_replace($search,"",$private_key);
$private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1];
$res=openssl_get_privatekey($private_key);if($res)
{
if($type == 'RSA'){
openssl_sign($data, $sign,$res);
}elseif($type == 'RSA2'){
//OPENSSL_ALGO_SHA256
openssl_sign($data, $sign,$res,OPENSSL_ALGO_SHA256);
}
openssl_free_key($res);
}else {
exit("私钥格式有误");
}
$sign = base64_encode($sign);
return $sign;
}/**
* RSA验签
* @param $data 待签名数据
* @param $public_key 公钥字符串
* @param $sign 要校对的的签名结果
* return 验证结果
*/
function rsaCheck($data, $public_key, $sign,$type = 'RSA') {
$search = [
"-----BEGIN PUBLIC KEY-----",
"-----END PUBLIC KEY-----",
"\n",
"\r",
"\r\n"
];
$public_key=str_replace($search,"",$public_key);
$public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];
$res=openssl_get_publickey($public_key);
if($res)
{
if($type == 'RSA'){
$result = (bool)openssl_verify($data, base64_decode($sign), $res);
}elseif($type == 'RSA2'){
$result = (bool)openssl_verify($data, base64_decode($sign), $res,OPENSSL_ALGO_SHA256);
}
openssl_free_key($res);
}else{
exit("公钥格式有误!");
}
return $result;
}}
代码已上传csdn,可以下载查看
https://download.csdn.net/download/hanyudanei/10398119
转载于:https://www.cnblogs.com/hanyudanei/p/9003838.html
支付宝单笔转账支付功能相关推荐
- 对接支付宝单笔转账接口
对接支付宝单笔转账接口 功能介绍 接入准备 调用支付宝api需要以下参数: 项目引入 操作流程 创建小程序 配置小程序 集成配置 SDK 助手 详细操作流程 获取appId 获取证书 获取AES密钥 ...
- 平台资金提现解决方案之实现支付宝单笔转账到银行卡功能
大家好,我是小悟 使用场景 不管是做APP.电脑网站.手机网站还是小程序,为了推广基本上都离不开用户分佣的场景. 换句话说就是在其平台内为每个用户设置"电子钱包"功能,而电子钱包在 ...
- php手机网站支付宝_PHP实现支付宝手机网站支付功能
PHP实现支付宝手机网站支付功能的方法:首先开通支付宝商家中心里面的手机网站支付:然后进入开发者中心,获取到APPID:接着去文档中心下载"DEMO":最后将"demo& ...
- Spring Boot集成支付宝电脑网站支付功能
Spring Boot集成支付宝电脑网站支付功能 接入准备 登录 创建应用 添加能力 生成私钥与公钥 开发设置 沙箱环境 示例Demo的使用与学习 下载Demo 启动项目 参数配置 执行测试 Spri ...
- 支付宝支付、支付宝单笔转账-----后端综合集成
1.业务场景 用户在平台选好东西,点击支付宝付款 根据场景不同唤起支付(pc端为二维码支付,手机wap端为wap支付,app为app支付) 用户支付完成回到系统. 由以上三个步骤我们大概可以知道,我们 ...
- 支付宝 单笔转账到支付宝账户接口 - 提现
实现用户提现 资金自动到账 前期的支付宝配置 可以参考文章 支付宝配置 (新版) 当前开发环境: Windows phpstudy ThinkPHP5 支付宝接口新版 1.0 实现提现的步骤 1 开发 ...
- 支付宝单笔转账到支付宝账户(用于分成或者退款)
超快速接入 支付宝官方文档 直接上代码 SDK AlipayUtils 支付宝官方文档 转账到支付宝用户快速接入 单笔转账到支付宝账户接入助手 直接上代码 SDK <!-- https://mv ...
- PHP 支付宝 “(单笔转账接口)转账到支付宝账号”
目录 前言 一.服务层 二.控制层 1.控制层 2.接口返回参数实例 前言 单笔转账接口 | 网页&移动应用 准备: 1:应用的证书(证书申请和配置可以参考我另一篇分享"支付宝 '应 ...
- php 个人账户转账,支付宝单笔转账到支付宝个人账户接口 ( PHP 版 )
alipay.fund.trans.toaccount.transfer(单笔转账到支付宝账户接口) 单笔转账到支付宝账户接口是基于支付宝的资金处理能力,为了满足支付宝商家向其他支付宝账户转账的需求, ...
最新文章
- Bitcoin.com宣布将成立2亿美元的BCH生态系统投资基金
- subview自适应superview的frame autosizingMask(转)
- Matlab中pickic_法语「野餐」怎么写?不是picnic哦
- mysql内置含糊_mySQL入门04 内置函数
- php 显示目录列表,php读取目录列表与文件列表的代码举例
- Ubuntu 20.04 LTS 已上架 Windows 10 应用商店
- 【解决方案】客户端请求数据较大时,nginx返回数据被截断
- javascript基础知识总结
- Java中几种输出当前时间的代码
- 基于RS485的Modbus协议
- 手机上怎么把PDF转换成word呢?分享一个转换小神器
- Rme Babyface Pro FS娃娃脸声卡安装调试教程
- 【DG】DG的3种保护模式
- 金额格式化,符号位,保留两位小数
- 智能家居,产业跌宕三十年
- 好吧! 阿达 奥古尼斯
- 零伽壹产业研究:新商业奇观元宇宙,多种技术的集大成者
- 密码学技术如何选型?终探量子计算通信的安全模型
- 2021-04-24 - 电脑主板 - 升级Blos和ME - 学习/实践
- 2022最新圣诞节代码:圣诞树