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中使用支付宝手机网站支付 和 支付宝退款的更多相关文章

  1. Laravel5.5 支付宝手机网站支付的教程

    https://segmentfault.com/a/1190000015559571 这篇文章主要介绍了Laravel5.5 支付宝手机网站支付的教程,小编觉得挺不错的,现在分享给大家,也给大家做个 ...

  2. 自己动手搞定支付宝手机网站支付接口 FOR ECShop

    支付宝WAP网站版本的支付接口网上整合的比较少,看到很多网站在卖,顿觉无语. 主要是得自己查看支付宝官方提供的SDK中的开发文档. 支付宝sdk下载地址:https://doc.open.alipay ...

  3. PHP支付宝手机网站支付功能

    1.开通支付宝商家中心里面的手机网站支付 2.再去开放平台-开发者中心-创建移动支付的应用-获取到APPID 3.接着去文档中心下载DEMO 其实demo很简单.如果第一次看的话会存在看不懂的状态. ...

  4. 支付宝手机网站支付流程(Node实现)

    前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...

  5. Asp.Net支付宝手机网站支付接口API之C#版

    一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...

  6. tp3.2 支付宝手机网站支付

    手机网站支付接口,支付宝官方文档:https://b.alipay.com/signing/productSet.htm?navKey=all 第一步: 1)登陆支付宝企业账号 进入支付宝官网 ,登陆 ...

  7. 支付宝手机网站支付(基于Java实现支付宝手机网站支付)

    支付宝支付核心需要的参数是(APPID,PRIVATE_KEY,ALIPAY_PUBLIC_KEY) APPID:创建应用后就有的APPID. PRIVATE_KEY:应用私钥 ALIPAY_PUBL ...

  8. 支付宝开发之手机网站支付(H5支付)

    其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...

  9. 手机网站支付如何接入支付宝简易版支付功能PHP版

    接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台  2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...

随机推荐

  1. Caffe2——C++ 预测(predict)Demo

    因为最近入坑Caffe2,它最近还一直在更新,所以坑比较多,官方也只给出了python的demo,C++的暂时还找不到,有也只有一个简单版的,不够用,所以就总结了一下,结合网上和自己的实践,整理了一下 ...

  2. notepad++使用正则表达式的查找替换

    使用正则表达式可以很好地完成很多繁琐耗时的工作,以下抄录editplus正则表达式的使用,同样适用于notepad++:表达式 说明\t 制表符.\n 新行.. 匹配任意字符.| 匹配表达式左边和右边 ...

  3. python爬虫scrapy框架——爬取伯乐在线网站文章

    一.前言  1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...

  4. Ajax编程(HTTP请求与响应及API)详解

    AJAX编程 即 Asynchronous [e'sɪŋkrənəs] Javascript And XML, AJAX 不是一门的新的语言,而是对现有技术的综合利用. 本质是在HTTP协议的基础上以 ...

  5. Selenium学习笔记(1) - 自动化测试体系与原理

    技术体系 基于代码的测试(Code-Based Testing) 基于协议的测试(Protocol-Based Testing) 基于界面的测试(GUI-Based Testing) 工作原理 基于代 ...

  6. poj1986带权lca

    lca求距离,带权值 的树上求lca,我是用倍增法求的,求两点之间的距离转化为到根节点之间的距离 (de了一个小时 的bug,重打居然就过了....) #include<map> #inc ...

  7. 接口测试工具---postman下载地址

    接口测试工具---postman下载地址: https://app.getpostman.com/app/download/win64?_ga=2.3555895.622696496.15081214 ...

  8. Oracle DBLink连接数过多的问题(Ora-02020)

    前不久开发人员编译存储时报ORA -02020 错,如下是解决方案步骤.   报错全信息: Error:OR A -04052在查: 找远程对象 NIP.PB_PERADDRESSLIST@DB_NI ...

  9. OpenStack Mitaka HA部署方案(随笔)

    [Toc] https://github.com/wanstack/AutoMitaka # 亲情奉献安装openstack HA脚本 使用python + shell,完成了基本的核心功能(纯二层的 ...

  10. 如何退出telnet

    ctrl键+ENter键 然后输入 进入telnet 命令 quit