前言:

因公司业务是加盟平台,入驻商户需要到账到商户自己账户。所以就出现了服务商模式的支付宝支付。

1.准备工作

  1. 文件准备,当面付SDK下载地址:网页&移动应用学习路径 | 网页&移动应用

文件大概内容就是这样子,保存到thinkphp/vendor

2.创建第三方应用,支付宝有现成的创建流程。

地址:创建第三方应用 | 第三方应用,和正常的自研应用的生活号配置基本相同。需要

2.开始工作

1.配置当面付三方应用配置信息

目录:thinkphp/vendor/alipaydmf/f2fpay/config/config.php

已经明确以下信息的直接配置

<?php
$config = array (//签名方式,默认为RSA2(RSA2048)'sign_type' => "RSA2",//支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。'alipay_public_key' => "",//填写支付宝开放平台中,第三方应用的支付宝公钥//商户私钥'merchant_private_key' => "",//第三方应用商户私钥//编码格式'charset' => "UTF-8",//支付宝网关'gatewayUrl' => "https://openapi.alipay.com/gateway.do",//应用ID'app_id' => "",//第三方应用的APPID//异步通知地址,只有扫码支付预下单可用'notify_url' => "",//第三方应用中的配置的回调地址//最大查询重试次数'MaxQueryRetry' => "10",//默认即可//查询间隔'QueryDuration' => "3"//默认即可
);

在不明确以上配置时候,重新生成,再进行配置

小提示:商户私钥在支付宝开放平台找不到的,只有公钥和支付宝公钥。如果第三方应用是新创建的没有涉及任何业务。可以通过“支付宝开放平台开发助手”重新生成就可以了。

红框区域一定要按照图上去选择,之后再点击生成密钥。RSA2、PKCS1 ,生成好之后配置到 支付宝开发平台的第三方应用的开发设置模块中,和thinkphp项目当面付SDK的config.php中。

2.开始授权

2.1参考地址:第三方应用授权 | 第三方应用

//自助收银商户授权 $shop_id 店铺ID
function alipay_auth($shop_id){//链接拼接的app_id为第三方应用的APPID$auth_url = "https://openauth.alipay.com/oauth2/appToAppAuth.htm?shop_id=" . $shop_id . "&app_id=" . $this->appid . "&redirect_uri=" . urlencode($this->redirect_uri);$this->redirect($auth_url);}

注意:这个链接中的app_id为第三方应用的APPID

这个入口是通过店铺列表,传参店铺ID,方便回调时候保存令牌信息 app_auth_token

链接打开,如果浏览器没有登录支付宝账号。会提示扫码登录,登录用户是商户的支付宝用户

2.2确认授权后,回调处理。

    //第三方应用授权回调处理function auth_notify(){if(!empty(input('get.app_id')) && !empty(input('get.app_auth_code'))){//获取令牌方法的控制器$payApi=controller('api/Alipay');//第三方应用ID$app_id = input('get.app_id');//店铺ID$shop_id = input('get.shop_id');//使用 app_auth_code 换取 app_auth_token$app_auth_code = input('get.app_auth_code');$payApi->get_auth_token($app_id,$app_auth_code,$shop_id);}}

2.3使用 app_auth_code 换取 app_auth_token(上图get_auth_token方法)

    //换取应用授权令牌 $app_id $app_auth_code  $shop_idfunction get_auth_token($app_id, $app_auth_code, $shop_id){//因为以下文件只使用一次,require_once就可以满足使用$config = [];require_once '../vendor/alipaydmf/aop/AopClient.php';require_once '../vendor/alipaydmf/aop/request/AlipayOpenAuthTokenAppRequest.php';require_once '../vendor/alipaydmf/f2fpay/config/config.php';$aop = new \AopClient ();$aop->gatewayUrl = $config['gatewayUrl'];$aop->appId = $config['app_id'];$aop->rsaPrivateKey = $config['merchant_private_key'];$aop->alipayrsaPublicKey = $config['alipay_public_key'];$aop->apiVersion = '1.0';$aop->signType = $config['sign_type'];$aop->postCharset = $config['charset'];$aop->format = 'json';$request = new \AlipayOpenAuthTokenAppRequest ();$params = array('grant_type' => 'authorization_code', 'code' => $app_auth_code,'refresh_token' => '');$request->setBizContent(json_encode($params));$result = $aop->execute($request);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";$resultObj = $result->$responseNode;$resultCode = $resultObj->code;if (!empty($resultCode) && $resultCode == 10000) {//授权成功,保存店铺对应的app_auth_token$auth_info = json_decode(json_encode($result), true);$dataInfo['app_auth_token'] =     $auth_info['alipay_open_auth_token_app_response']['app_auth_token'];$rs = Db::name('shop')->where('id', $shop_id)->update($dataInfo);//授权成功,并保存app_auth_tokenecho "success";} else {//授权失败echo $result->$responseNode->msg;}}

以上步骤走完之后,商户的授权信息基本已经完成了。

总结一点,不要让第三方应用和商户应用混淆。在授权的时候只需要第三方应用的信息就可以(可能是菜,因为这个浪费了好多时间)

3.当面付使用ISV模式进行扣款

当面付接入参考地址:当面付产品介绍 | 网页&移动应用

  //付款码扣款 $out_trade_no 订单,$subject 订单标题,$total_amount 总金额,$pay_code 付款码function unifiedorder_codepay($out_trade_no, $subject, $total_amount, $pay_code){require_once '../vendor/alipaydmf/f2fpay/service/AlipayTradeService.php';require_once '../vendor/alipaydmf/f2fpay/model/builder/AlipayTradePayContentBuilder.php';require_once '../vendor/alipaydmf/f2fpay/config/config.php';//商品描述,可空$body = '';$barPayRequestBuilder = new \AlipayTradePayContentBuilder();$barPayRequestBuilder->setOutTradeNo($out_trade_no);$barPayRequestBuilder->setTotalAmount($total_amount);$barPayRequestBuilder->setAuthCode($pay_code);$barPayRequestBuilder->setTimeExpress("5m");$barPayRequestBuilder->setSubject($subject);$barPayRequestBuilder->setBody($body);//$arr是在生成订单时候缓存的数据,查询了店铺列表把该店铺的app_auth_token传递了过来$arr = cache('txm_' . $out_trade_no);//AlipayTradePayContentBuilder类中自带setAppAuthToken方法$barPayRequestBuilder->setAppAuthToken($arr['app_auth_token']);// 调用barPay方法获取当面付应答$qrPay = new \AlipayTradeService($config);$qrPayResult = $qrPay->barPay($barPayRequestBuilder);$data = [];$data["status"] = $qrPayResult->getTradeStatus(); // SUCCESS/FAILED/UNKNOWN$response = json_decode(json_encode($qrPayResult->getResponse()), true);$arr = cache('txm_' . $out_trade_no);//错误信息记录//file_put_contents('../runtime/busalicodepay.txt', json_encode($response) . "\r\n", FILE_APPEND);if ($data["status"] == "SUCCESS") { //通信成功if ($response["code"] == "10000") {//支付成功//执行系统订单业务逻辑$order_arr['msg'] = "支付成功";$order_arr['order_sn'] = $out_trade_no;$order_arr['code'] = 1;return $order_arr;} else {json_data_return(0, $data["msg"]);}} else {//错误信息记录//file_put_contents('../runtime/busalicodepayerr.txt', json_encode($response) . "\r\n", FILE_APPEND);$order_arr['msg'] = "失败";$order_arr['order_sn'] = $out_trade_no;$order_arr['code'] = 0;return $order_arr;}}

小提示:如果不走ISV模式,把下图代码更换注释掉就可以。(个人建议如果需要服务商模式,最好新建一个控制器去处理业务,在提交订单的时候判断店铺中是否有授权的app_auth_token,走对应的控制器)

//把代码中这个配置文件的引用换为自研应用的配置文件
require_once '../vendor/alipaydmf/f2fpay/config/config.php';
//这两行注释掉
$arr = cache('txm_' . $out_trade_no);
$barPayRequestBuilder->setAppAuthToken($arr['app_auth_token']);

以上就是ISV服务商模式下的当面付支付代码。菜鸟一枚,记录一下~

ThinkPHP5支付宝支付(当面付)付款码ISV服务商模式相关推荐

  1. 支付宝支付-当面付之扫码支付「扫码支付」

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付 支付宝支付-手机浏览器H5支付 支付宝支付-当面付之扫码支付「本文」 当面付包含两种支付方式:商品条形码支付 + 扫码支付 经过前面两 ...

  2. 支付宝支付-当面付和App支付

    公司最近在做个视频桩的项目,需要在桩上用到支付宝支付功能. 去年项目当中有应用过支付宝,当时前端是用react,后台返回qcode到前端后,前端通过react的插件(其实就是支付宝的sdk),拼接qc ...

  3. 支付宝支付——当面付

    开发当面付首先需要成为服务商,然后创建app.配置你.密钥,相应流程参考官网 https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0. ...

  4. 支付宝当面付扫码支付功能详解

    前言: 上篇呢主要是针对微信验证登录做了讲解,当然微信也是提供了很多的接口来供开发者进行调用,同样,微信也有支付,相信小伙伴们学习了上篇的登录之后,已经能够融汇贯通,做出微信的支付功能.那么本篇呢就讲 ...

  5. 支付宝当面付扫码支付支付后不回调_支付宝当面付门店码

    政策简介:针对当面付的商家,支付宝推出商家数字化经营推广方案,该方案包含两个个政策:大促商家优惠券招商政策.门店码铺设政策,不同政策可获得不同的奖励. 政策奖励标准:(1)铺设奖励=有效门店码铺设数量 ...

  6. 支付宝当面付-扫码支付

    1.需要jar包 2.请求支付 private static AlipayTradeService tradeService;@Autowiredstatic {/** 一定要在创建AlipayTra ...

  7. 支付宝的当面付扫一扫功能

    首先需要一个沙箱环境,专门为开发者提供的.里面给你提供了卖家账号,和买家账号.具体的自行百度. 需要下载沙箱版的支付宝,然后登陆提供的买卖家账号即可操作.因为在沙箱环境中支付宝给出的二维码只能在沙箱版 ...

  8. delphi7微信支付宝支付单机版前台源码

    delphi7微信支付宝支付单机版前台源码 try NonceStr := GetRandomStr(NONCE_STR); ListStr.Values['appid'] := appidstr; ...

  9. C#支付宝当面付扫码支付开发,包括demo代码的修改和蚂蚁金服开发平台的配置

    支付宝开发前配置: 第一步登陆蚂蚁金服开放平台服:支付宝扫码登陆 登录之后看到一下界面,找到自主研发选项,点击开始入驻 配置自己的个人信息: 到此为止我们所有应该做的配置基本上就完成了,但是我们要注意 ...

最新文章

  1. 2013年第10周三低潮
  2. PHP使用phpexcel读取excel文件
  3. 高并发简单解决方案————redis队列缓存+mysql 批量入库(ThinkPhP)
  4. Android之MediaPlayer播放音乐并实现进度条实例
  5. 宝塔面板使用阿里云ssl证书
  6. C++ STL的基本基本原理
  7. Python几个简单好用的基础功能
  8. boost::phoenix模块实现自适应回声服务器相关的测试程序
  9. 函数形参传递概念及问题分析
  10. Navicat怎么看oracle作业,[数据库] Navicat for Oracle基本用法图文介绍
  11. Mybatis 插入时获取主键的方式
  12. STM32----TIM6和TIM7
  13. TCP协议之三次握手与四次挥手
  14. python作用域总结_关于Python作用域自学总结
  15. python服务器运维步骤_python运维服务器
  16. [生产力]在线免费的EDA工具,可编辑AD\EAGLE等文件
  17. 游戏角色设计有哪些风格类型
  18. JavaScript笔记 03:数组
  19. gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
  20. Verilog模块语法

热门文章

  1. matlab2013a编译器,如何MATLAB2013a在win8-64位系统上能装mex编译器
  2. 软件质量保证和软件配置管理
  3. python 对excel的函数操作_自动化报表(3)
  4. 浅谈Redis数据类型
  5. sigmoid函数和阶跃函数的Python代码比较 ← 斋藤康毅
  6. html5 多点触控 缩放,WebBrowser禁用触摸缩放
  7. 初涉VB.NET入门级代码积累
  8. tomcat服务器缓存配置文件,Tomcat7服务器配置Cache-Control和Expires
  9. 新手必知的用户留存率知识
  10. Metasploit6.0系列教程 -- 渗透Joomla网站