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

在加上本人比较技术比较渣(比较懒导致的),不太喜欢引用那么大的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. Server.MapPath()相关

    Server.MapPath()相关 1.      Server.MapPath()介绍 Server.MapPath(string path)作用是返回与Web服务器上的指定虚拟路径相对应的物理文 ...

  2. ubuntu 14 安装XML::Simple 模块

    最近需要用到perl 来解析xml 文件,从网上搜索了一下,大部分都建议使用XML::Simple 模块来解析,这里记录一下安装过程 方法一: 直接使用CPAN 来安装模块 $ perl -MCPAN ...

  3. rpm、yum(转)

    rpm http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html yum http://www.cnblogs ...

  4. ACM之路

    从10月我刚接触到acm竞赛,到现在2017年2.20接近4个月的时间,我才刷到200道题.在刷题的过程中,我曾遇到困难,我也从一次性就a过,但是有时候会想到放弃.不过既然已经踏进来一只脚,还不如就好 ...

  5. iOS开发 - 线程与进程的认识与理解

    进程: 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和Xcode,系统会分别启动2个进程; 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内; 线程: 一个进程要想执行任务 ...

  6. SpringBoot | Velocity template

    SpringBoot版本: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...

  7. java关于方法参数传递的相关问题讨论

    我们知道,java中定义变量的目的有两个: 1.防止被垃圾回收机制回收,毕竟如果没有明确指向真实物理内存的'代号'很大可能会被java垃圾回收机制当作垃圾回收. 2.便于引用,方便处理. packag ...

  8. java中数据的存放位置

    引用自java编程思想四----2.2.1 程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据:(1) 寄存器.这是最快的保存区域,因为它位于和其 ...

  9. django_logging

    django使用python自带的logging打印日志 logging 是线程安全的,其主要由4部分组成: Logger 用户使用的直接接口,将日志传递给Handler Handler 控制日志输出 ...

  10. POJ-1020-Anniversary Cake

    链接:https://vjudge.net/problem/POJ-1020 题意: 给一个宽为s的正方形,再给n个变长为an的小正方形, 判断是否能将这n个小正方形完全填充到这个大正方形里面. 思路 ...