对于每个刚开始工作的新手来说,无论支付宝支付还是微信支付都是跑不掉的一个小门槛。

在加上本人比较技术比较渣(比较懒导致的),不太喜欢引用那么大的SDK,于是就简单集成了一下支付宝的支付。

但也只是只有支付而已哦,其他的一些功能还是自己用自己在集成吧,嘻嘻(#^.^#)还是懒。

废话不多说了,直接上代码:

/**
* 支付宝支付
*/
class Alipay
{
private $config =[
"app_id" => "************", //支付宝APPid
"rsaPrivateKey" => "************", //支付宝私钥
"rsaPublicKey" => "************", //支付宝公钥
"charset" => "utf-8",
"sign_type" => "RSA2",
"version" => "1.0",
];
private $submitUrl = "https://openapi.alipay.com/gateway.do" ;//提交地址
public $calltype = "app";//pc电脑端 app 手机和app端公用
public $submit_auto=true; public function index($data)
{
$calltype=$this->calltype;
return $this->$calltype($data);
}
public function app($data)
{
$return_url=$data['return_url'];
$notify_url=$data['notify_url'];
$subject=$data['subject'];
$order_sn=$data['order_sn'];
$total=$data['total']; $biz_content=[
'body'=>'',
'subject'=>$subject,
'out_trade_no'=>$order_sn,
'timeout_express'=>'30m',
'total_amount'=>$total,
'product_code'=>'QUICK_MSECURITY_PAY',
];
$postdata=[
'app_id'=>$this->config['app_id'],
'method'=>'alipay.trade.app.pay',
'format'=>'json',
'charset'=>$this->config['charset'],
'sign_type'=>$this->config['sign_type'],
'sign'=>'',
'timestamp'=>date('Y-m-d H:i:s'),
'version'=>'1.0',
'notify_url'=>$notify_url,
'biz_content'=>json_encode($biz_content),
]; $signdata=$this->alisign($postdata);
$str=$this->keyandvalStr($signdata,1);
//返回链接不能带官方https链接
return $str; }
public function pc($data)
{
$return_url=$data['return_url'];
$notify_url=$data['notify_url'];
$biz_content=[
"total_amount"=>$data['total'],
"product_code"=>"FAST_INSTANT_TRADE_PAY",
"subject"=>$data['subject'],
"out_trade_no"=>$data['order_sn'],
"goods_type"=>1,//商品类型 0虚拟商品 1实物商品
]; $post=[
'app_id'=>$this->config['app_id'],
'method'=>'alipay.trade.page.pay',
'format'=>'JSON',
'return_url'=>$return_url,
'charset'=>$this->config['charset'],
'sign_type'=>$this->config['sign_type'],
// 'sign'=>$sign,
'timestamp'=>date('Y-m-d H:i:s'),
'version'=>$this->config['version'],
'notify_url'=>$notify_url,
'biz_content'=>json_encode($biz_content),
]; $signdata=$this->alisign($post); $html=$this->formsubmithtml($this->submitUrl,$signdata); return $html;
}
public function mobile($data)
{
$return_url=$data['return_url'];
$notify_url=$data['notify_url'];
$biz_content=[
"total_amount"=>$data['total'],
"product_code"=>"QUICK_WAP_WAY",
"subject"=>$data['subject'],
"out_trade_no"=>$data['order_sn'],
"goods_type"=>1,//商品类型 0虚拟商品 1实物商品
]; $post=[
'app_id'=>$this->config['app_id'],
'method'=>'alipay.trade.wap.pay',
'format'=>'JSON',
'return_url'=>$return_url,
'charset'=>$this->config['charset'],
'sign_type'=>$this->config['sign_type'],
// 'sign'=>$sign,
'timestamp'=>date('Y-m-d H:i:s'),
'version'=>$this->config['version'],
'notify_url'=>$notify_url,
'biz_content'=>json_encode($biz_content),
]; $signdata=$this->alisign($post);
$str=$this->keyandvalStr($signdata,1); $url="https://openapi.alipay.com/gateway.do?".$str; return $url;
}
public function alisign($data)
{
$rsaPrivateKey=$this->config['rsaPrivateKey'];
$buff = "";
ksort($data);
$buff=$this->keyandvalStr($data);
$str = chunk_split($rsaPrivateKey, 64, "\n");
$res = "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n"; $sign=$this->ras2Sign($buff,$res);
$data['sign']=$sign;
return $data;
}
function keyandvalStr($data,$flg=0)
{
$buff="";
foreach ($data as $k => $v) {
if($flg!=0 && $v != "" && !is_array($v))
{
$v=urlencode($v);
$buff .= $k . "=" . $v . "&";
}else{
if($k != "sign" && $v != "" && !is_array($v)){
$buff .= $k . "=" . $v . "&";
}
}
}
$buff = trim($buff, "&");
return $buff;
}
function ras2Sign($buff,$res)
{
$sign='';
openssl_sign($buff, $sign, $res, OPENSSL_ALGO_SHA256);
$sign = base64_encode($sign);
return $sign;
}
function formsubmithtml($action,$data)
{
$sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$action."' method='POST'>";
foreach ($data as $key => $value) {
$val = str_replace("'","&apos;",$value);
$sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
}
$sHtml = $sHtml."<input type='submit' class='paysubmit' value='ok' ></form>";
if($this->submit_auto==true)
{
$sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
} return $sHtml;
} }

调用方法:

use pay\Alipay;

    $callD=[
'return_url' => '支付完成跳转路径',
'notify_url' => '回调路径',
'total' => '支付总额',
'subject' => '支付说明',
'order_sn' => '生成订单号',
];
$url=$this->Alipay($callD); public function Alipay($data,$flg=true)
{
$pay = new Alipay();
$pay->calltype='app';
$pay->submit_auto=$flg;
$pay=$pay->index($data);
return $pay;
}

以上即是本次分享的内容。

感谢您的观看。

2019年05月10日

tp5对接支付宝支付简单集成的更多相关文章

  1. Python对接支付宝支付自实现

    Python对接支付宝支付自实现 # -*- coding: utf-8 -*- import base64 import json import urllib.parse from datetime ...

  2. Django 对接 支付宝支付, 回调

    平台 点击这里进入 蚂蚁金服开放平台 沙箱 点击这里进入 沙箱环境 初始界面 设置公钥 下载创建秘钥工具 1.  进入文档中心 这里 2. 选中 电脑网站支付 3. 进入后选中 API 列表 中的 统 ...

  3. springboot项目对接支付宝支付

    支付宝对接文档 一.准备工作 1. 首先要到 蚂蚁金服开发者中心 https://openhome.alipay.com/platform/home.htm 注册商家账户,并认证. 2.下载java版 ...

  4. Thinkcmf对接支付宝支付和获取用户信息

    一.         登录支付宝开放平台 平台地址:https://open.alipay.com/ 二.         创建应用并申请上线 登录后,[进入我的开放平台],依次点击[开发者中心]-& ...

  5. iOS:集成支付宝支付

    一.介绍 支付宝的集成还是比较简单的,按照文档来一步步操作,基本上很顺利.不过,仍然有两个地方会是坑.这里我集成成功了,在此整理一下.说先说一下我遇到的坑如下: 第一个坑:下载的SDK文件AliPay ...

  6. 李洪强iOS开发支付集成之支付宝支付

    iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...

  7. android app 集成 支付宝支付 微信支付

    项目中部分功能点需要用到支付功能,移动端主要集成支付宝支付和微信支付 支付宝sdk以及demo下载地址:https://doc.open.alipay.com/doc2/detail.htm?spm= ...

  8. App对接支付宝移动支付功能

    前段时间看了下app对接支付宝移动支付的功能,并自己总结了下支付宝移动支付的实现流程 一.申请流程          前提是已有现成的应用. 1.  申请地址            https://b ...

  9. iOS开发支付集成之支付宝支付

    项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...

随机推荐

  1. 阻塞调用ShellExecute函数

    SHELLEXECUTEINFO si;ZeroMemory(&si, sizeof(si));si.cbSize = sizeof(si);si.fMask = SEE_MASK_NOCLO ...

  2. U3D手游《苍穹变》性能优化经验谈

    4月11日,由unity公司举办的Unite 2016大会在上海正式举行,在4月12日的案例分享专场会议上,天神互动U3D高级开发工程师康凯以手游<苍穹变>为例讲述了3DMMOARPG游戏 ...

  3. GPU渲染管线与shader

    1 几何阶段(顶点shader处理这部分) 模型坐标空间-世界坐标空间-观察坐标空间-屏幕坐标空间 其中从观察空间 到 屏幕空间需要经过3步(CVV单位立方体,规范立方体) a用透视变换矩阵把顶点从视 ...

  4. bzoj 5120: [2017国家集训队测试]无限之环【最小费用最大流】

    玄妙的建图-- 这种平衡度数的题按套路是先黑白染色然后分别连ST点,相邻格子连黑向白连费用1流量0的边,然后考虑费用怎么表示 把一个点拆成五个,上下左右中,中间点黑白染色连ST, 对于连S的点,中点连 ...

  5. Codevs 3409 搬运礼物

    3409 搬运礼物 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解       题目描述 Description 小浣熊松松特别喜欢交 ...

  6. 编译出现No rule to make target `out/host/linux-x86/bin/aapt', needed by `out/target/common/obj/APPS/MyTv4_intermediates/src/R.stamp'问题

    查找路径发现的确没有MyTv4_intermediates/src/R.stamp,这需要生成这个文件

  7. assembly x86(nasm)串比较

    预留字符串口令,输入口令串与预留密码串比较.若匹配则显示“MATCH!CONGRATULATION”,否则显示“NOMATCH!”,并让用户重新输入,程序能对口令进行测试,但测试次数最多3次,若3次输 ...

  8. PostgreSQL-4-DML数据操纵语言

    1.查询语句 \h SELECT  查看SELECT语句说明 基本语法 SELECT column1, column2, columnN FROM table_name;  查询单列/多列数据 SEL ...

  9. centos7版本对比之前版本的部分命令差异

    centos7版本下的命令和之前的centos版本的命令有些许不同,最近在电脑上用VBox安装了一个centos7版本.在做一些网卡配置和安装mysql的时候遇到了一些问题.在这里总结跟大家分享下. ...

  10. css未知宽度水平居中整理

    1.text-align 兼容性很好 .wp {text-align: center;} .test {display: inline;} <ul class="wp"> ...