在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才能调用相应的 ...
随机推荐
- Record and accumulation
最近有同学在准备校招的问题,问我几个问题,我觉得有必要把大家的问题汇总下: 1.在设计变量的while指挥时候,可以利用弹栈的特性以及Java传值 只是传递的副本 去控制 : https://www ...
- python作业大纲分析
2018-11-22 目前自学python这么久,零零散散的写了几次作业,下面是几个在完成过程中遇到困难较多的作业. 1.ATM+购物车系统 需求: 1.额度 15000或自定义 2.实现购物商城, ...
- 最大流EK算法/DINIC算法学习
之前一直觉得很难,没学过网络流,毕竟是基础知识现在重新来看. 定义一下网络流问题,就是在一幅有向图中,每条边有两个属性,一个是cap表示容量,一个是flow 表示流过的流量.我们要求解的问题就是从S点 ...
- 设置Qt程序在Windows开机后自动运行
(转自:http://blog.csdn.net/weiren2006/article/details/7443362) 主要原理是修改Windows的注册表来实现的,Qt的QSettings提供了访 ...
- LeetCode OJ:Merge Sorted Array(合并排序的数组)
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. Note:Yo ...
- Django --- celery异步任务与RabbitMQ模块
一 RabbitMQ 和 celery 1 celery Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务, ...
- Activity步骤
Android项目结构 src:Java源代码所在的文件夹 gen:自动生成的R.java所在文件夹 Android开发工具包:android.jar res:资源文件夹,包含3种 drawable: ...
- Android 进阶14:源码解读 Android 消息机制( Message MessageQueue Handler Looper)
不要心急,一点一点的进步才是最靠谱的. 读完本文你将了解: 前言 Message 如何获取一个消息 Messageobtain 消息的回收利用 MessageQueue MessageQueue 的属 ...
- 测试中认识 sqlite
1.SQLite,是一款轻型的数据库:简单, 轻松的API 单词速记中单词离线包也用到sqlite 百度了一下,基本的使用语句: .help .quit sqlite3 testDB.db 在当前目录 ...
- VS调试配置外网可访问
1.首先找到项目的配置文件夹(一般是隐藏的) 2.在里面的config文件夹找到applicationhost.config配置文件,打开,在sites节点找到你项目的那个site配置,新建一个绑定: