在laravel中使用支付宝手机网站支付 和 支付宝退款
1、在蚂蚁金服开放平台中申请对应的应用,并根据提示进行签约
2、给对应的应用信息 生成私钥和公钥(私钥会保存在本地,公钥会放在对应的应用信息中)
3、下载手机网站支付 对应的php sdk
4、将sdk放置在项目app下 ,我将对应sdk文件夹更名为alipayWapPay
5、引入sdk类比如:
require_once app_path('Library') . '/alipayWapPay/wappay/service/AlipayTradeService.php';
require_once app_path('Library') . '/alipayWapPay/wappay/buildermodel/AlipayTradeWapPayContentBuilder.php';
require_once app_path('Library') . '/alipayWapPay/wappay/./../config.php';
use AlipayTradeWapPayContentBuilder;
use AlipayTradeService;
//其中的config.php这样用是没用的,下面的config我在项目中使用了laravel的config机制
6、设置路由
public function aliWapPayTest(Request $request)
{
$data = $request->all();
// dd($data);
// $out_trade_no = getTradeNOString(); //公共方法生成唯一订单号
$out_trade_no = 'abc123456'; //公共方法生成唯一订单号
$subject = '预约'; //数据仅供测试,下同
$total_amount = 0.01;
$body = 'test test!';
$timeout_express="1m"; $payRequestBuilder = new AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setTimeExpress($timeout_express); $config = array (
//应用ID,您的APPID。
'app_id' => "", //商户私钥,您的原始格式RSA私钥
'merchant_private_key' => "",
//异步通知地址
'notify_url' => "https://test/aliWapPayNotify", //同步跳转
'return_url' => "http://mitsein.com/alipay.trade.wap.pay-PHP-UTF-8/return_url.php", //编码格式
'charset' => "UTF-8", //签名方式
'sign_type'=>"RSA2", //支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "", );
$payResponse = new AlipayTradeService($config); $result=$payResponse->wapPay($payRequestBuilder,$config['return_url'],$config['notify_url']);
}
7、手机网页访问对应路由后会自动识别比并提示打开支付宝app,进行支付即可
在dxjk项目中使用示例:
public function userOrderAlipayEditionMobile(Request $request)
{
$data = $request->all();
//金钱特殊处理,通过后台查询取得
$res_order = \DB::table('order')
->where('order_id',$data['order_id'])
->first();
// dd($res_order);
$order_sid = $res_order->order_sid;
$money = $res_order->order_money;
$config = config('alywappayconf.alyconf');
$out_trade_no = $order_sid;
$subject = '会员版本'; //数据仅供测试,下同
$total_amount = $money;
$body = '会员版本!';
$timeout_express="1m"; $payRequestBuilder = new AlipayTradeWapPayContentBuilder();
$payRequestBuilder->setBody($body); $payRequestBuilder->setSubject($subject);
$payRequestBuilder->setOutTradeNo($out_trade_no);
$payRequestBuilder->setTotalAmount($total_amount); $payRequestBuilder->setTimeExpress($timeout_express); $payResponse = new AlipayTradeService($config); // 'return_url' => "http://danxigu.com/m_web",
$return_url = $config['returnEdition_url'] ."?id=".$data['order_id'];
$result=$payResponse->wapPay($payRequestBuilder,$return_url,$config['notifyEdition_url']); }
注:wapPay();中三个参数的意义 第一个是支付对象,第二个是回调页面,第三个是回调url[用于处理支付后的 业务逻辑 下面会给出示例];(其中这后两个参数是在config数组中,是灵活可变的,用于不同支付的回调)
alywappayconf.php 内容和解释如下
return [
/*
* Debug 模式,bool 值:true/false
*
* 当值为 false 时,所有的日志都不会记录
*/
'alyconf' => array (
//应用ID,您的APPID。
'app_id' => "2010720", //商户私钥,您的原始格式RSA私钥
'merchant_private_key' => "WnAgMBAAECggfHnvhZlWdmrEBSsTxEZ5duHRiQh7iaQjbOKyC3T/B9", //异步通知地址
'notify_url' => "https://test.test.com/aliWapPayNotify", //用户版本选择的异步通知地址
'notifyEdition_url' => "https://test.test.com/notifyAliEdition", //购买会议活动报名回调 支付宝 url()
'notifyUrlMeetingAly' => "https://test.test.com/notifyUrlMeetingAly", //成为会员回调 支付宝 url()
'notifyUrlJkAly' => "https://test.test.com/notifyUrlJkAly", //同步跳转
'return_url' => "http://test.test.com/m_html", //同步跳转
'returnEdition_url' => "http://test.test.com/m_html", //编码格式
'charset' => "UTF-8", //签名方式
'sign_type'=>"RSA2", //支付宝网关
'gatewayUrl' => "https://openapi.alipay.com/gateway.do", //支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' => "MII747Jh2mgtehXerPq0lpbQeT5YGqb6KQmN8A1pwIDAQAB", )
]; 三、支付回调接口逻辑处理示例: laravel controller 示例:
/**
* 成为会员回调 支付宝 url()
* param ()
*/
public function notifyUrlJkAly(Request $request)
{
$data = $request->all();
$order_sid = $data['out_trade_no'];
$time_now = time();
//修改订单用户和状态 此处需要对订单状态做判断
\DB::table('order')->where('order_sid',$order_sid)->update(['order_status'=>2,'order_ptime' => $time_now]);
//同时根据订单的类型修改用户的会员类型和 版本到期时间 默认加一年
$order_res = \DB::table('order')->where('order_sid',$order_sid)->first();
if($order_res){
//如果是版本支付订单,就修改用户的支付状态,和版本使用期限
$uid = $order_res->order_uid;
$date = date('Y',$time_now) + 1 . '-' . date('m-d H:i:s');//一年后日期
$ytime = strtotime($date);
$ress = \DB::table('user')->where('id',$uid)->update(['user_type' => 2,'user_btime' => $time_now,'user_etime' => $ytime]);
}
return true;
}
注:支付都是使用的订单编号"out_trade_no"参数进行逻辑处理 四:支付宝统一退款操作,理论上只要有out_trade_no即商户自己生产的sid就可以退款
注:退款时 会调用支付的回调接口,所以在支付成功的回调接口中要对订单状态进行判断 ,避免修改不了数据库订单的尴尬
范文引用示例:
https://blog.csdn.net/denglinqingqinyuzhao/article/details/77947690
1、引入上面所说的手机网站支付php的sdk
2、引入退款所需要的php类并use
require_once app_path('Library') . '/alipayWapPay/aop/AopClient.php';
require_once app_path('Library') . '/alipayWapPay/aop/request/AlipayTradeAppPayRequest.php';
require_once app_path('Library') . '/alipayWapPay/aop/request/AlipayTradeRefundRequest.php';
use Config;
use AopClient;
use AlipayTradeRefundRequest;
3、public function refundAlyTest(Request $r)
{
$aop = new AopClient ();
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = '******';//app_id
$aop->rsaPrivateKey = '*******';//请填写开发者私钥去头去尾去回车,一行字符串
$aop->alipayrsaPublicKey='*******';//请填写支付宝公钥,一行字符串
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='UTF-8';
$aop->format='json';
$request = new AlipayTradeRefundRequest ();
$out_trade_no = 'Dg1d1551072870';
$bizcontent = json_encode(
[
'out_trade_no' => $out_trade_no,
'trade_no' => '',
'refund_amount' => 0.01,
'refund_reason' => '正常退款', ]
); $request->setBizContent($bizcontent);
$result = $aop->execute ( $request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
$resultCode = $result->$responseNode->code;
if(!empty($resultCode)&&$resultCode == 10000){
$sid = $result->$responseNode->out_trade_no;
//订单退款逻辑处理 可以对数据库进行修改
return ['code' => 1000, 'data' => ['message' => '退款成功!']];
} else {
return ['code' => 1001, 'data' => ['message' => '退款失败!']];
}
}
在laravel中使用支付宝手机网站支付 和 支付宝退款的更多相关文章
- Laravel5.5 支付宝手机网站支付的教程
https://segmentfault.com/a/1190000015559571 这篇文章主要介绍了Laravel5.5 支付宝手机网站支付的教程,小编觉得挺不错的,现在分享给大家,也给大家做个 ...
- 自己动手搞定支付宝手机网站支付接口 FOR ECShop
支付宝WAP网站版本的支付接口网上整合的比较少,看到很多网站在卖,顿觉无语. 主要是得自己查看支付宝官方提供的SDK中的开发文档. 支付宝sdk下载地址:https://doc.open.alipay ...
- PHP支付宝手机网站支付功能
1.开通支付宝商家中心里面的手机网站支付 2.再去开放平台-开发者中心-创建移动支付的应用-获取到APPID 3.接着去文档中心下载DEMO 其实demo很简单.如果第一次看的话会存在看不懂的状态. ...
- 支付宝手机网站支付流程(Node实现)
前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...
- Asp.Net支付宝手机网站支付接口API之C#版
一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...
- tp3.2 支付宝手机网站支付
手机网站支付接口,支付宝官方文档:https://b.alipay.com/signing/productSet.htm?navKey=all 第一步: 1)登陆支付宝企业账号 进入支付宝官网 ,登陆 ...
- 支付宝手机网站支付(基于Java实现支付宝手机网站支付)
支付宝支付核心需要的参数是(APPID,PRIVATE_KEY,ALIPAY_PUBLIC_KEY) APPID:创建应用后就有的APPID. PRIVATE_KEY:应用私钥 ALIPAY_PUBL ...
- 支付宝开发之手机网站支付(H5支付)
其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...
- 手机网站支付如何接入支付宝简易版支付功能PHP版
接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台 2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...
随机推荐
- springBean参数注入的几个方法
1.普通方式注入 applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- struts2——文件下载自定义文件名,包括中文
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Dispatcher initialization failedUnable to load configuration 解决办法
检查<package name="action" extends="struts-default"></package>中是否有exte ...
- Node.js 项目的配置文件
在 Node.js 中可以通过process.env来访问当前的环境变量信息,比如: { PATH: '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', T ...
- XML DOM解析 基础概念
DOM和SAX W3C制定了一套书写XML分析器的标准接口规范——DOM. 除此以外,XML_DEV邮件列表中的成员根据应用的需求也自发地定义了一套对XML文档进行操作的接口规范——SAX. 这两种接 ...
- scala学习手记35 - 隐式类型转换
先来看一下下面的内容: 2 days "ago" 5 days "from_now" 如上的内容具体应该是什么呢?不过怎么看也不像是代码.不过既然是在学代码,拿 ...
- 火车头采集器db3导出sql语句
1.通过火狐 sqlite mananger工具,将.db3文件,导出为.sql文件2.右击表面content,属性:Export table 3.不要勾选 include create table. ...
- 【C#笔札】1 string类型
C中没有string这个类型,而是用字符串数组来实现,相对来说比较麻烦. LABVIEW相对来说要简单太多,毕竟他主要的精力集中在硬件控制上,软件操作方面极其简单. C#类似,C#中有System.S ...
- hdu4348区间更新的主席树+标记永久化
http://acm.hdu.edu.cn/showproblem.php?pid=4348 sb的标记永久化即可,刚开始add和sum没复制过来wa了两发...,操作和原来的都一样,出来单点变成区间 ...
- 51nod 1270 dp
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1270 简单的线性dp,最近狂刷水题真的是...药丸 差值最大得话要么是峰 ...