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

在加上本人比较技术比较渣(比较懒导致的),不太喜欢引用那么大的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. CodeForces722C Destroying Array【瞎搞】

    题意: 先给你一个序列,然后给你n个1-n的一个数,让你求前i个元素销毁的时候,区间字段和区间最大: 思路: 离线处理,维护新区间首尾位置的起点和终点,倒着处理: #include <bits/ ...

  2. POJ 3067【树状数组】

    题意: 给你两行数字,n个m个,然后给你k条线直接把两个数连起来,问有多少个交叉的 思路: 假定上一行是起点,下一行是终点. 把路按照起点从大到下排序, 然后可以直接对每条路查询,这条路目前的交叉数, ...

  3. JDK 重要目录结构

    \bin 目录包含 Java 的开发工具,包括 Java 编译器 javac.exe.Java 解释器 java.exe 等: javac:Java 编译器,用来将 Java 程序编译成字节码 jav ...

  4. Matlab图像处理相关

    相关函数: 读取:imread() %参数为文件名(路径)或url,格式等 写入:imwrite() %参数为写入数据矩阵,写入文件名(路径),格式等 显示:imshow() %显示由输入决定,属性自 ...

  5. linux tcpdump(转)

    转自 http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 默认启动 tcpdump 普通情况下,直接启动tcpdump将监 ...

  6. SimpleDateFormat线程不安全(转)

    有三种方法可以解决以上安全问题.  1).使用同步 package com.bijian.study.date; import java.text.ParseException; import jav ...

  7. native-echarts 在安卓上无法显示出来

    1.native-echarts 的配置是百度echarts 2.模拟器上试了很多次都显示不出来(具体不清楚,我的是这样) 3.真机测试可以显示图表,以下是配置: a.将node_modules\na ...

  8. bzoj1125:[POI2008]Poc

    传送门 这个题好难卡啊. 看到这种题自然会想到字符串hash是不是,但是对于每次操作造成的影响需要\(O(n)\)的时间去更新,自然是不优的 可以发现这个更新可以用数据结构来维护,对于每个hash值开 ...

  9. shell学习(3)- grep

    常用选项    -E :开启扩展(Extend)的正则表达式. -i  :忽略大小写(ignore case). -v :反过来(invert), 显示不包含匹配文本的所有行. -V 或 --vers ...

  10. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A

    Our beloved detective, Sherlock is currently trying to catch a serial killer who kills a person each ...