支付宝H5嵌入APP内部支付

简介: 前景:由于苹果支付收取手续费太高,决定采用APP内嵌套H5进行微信和支付宝进行支付。安卓手机可以直接使用APP支付功能(APP支付和H5支付,只有两个参数不同而已,以及返回的参数格式不同,仅此而已)

前景:由于苹果支付收取手续费太高,决定采用APP内嵌套H5进行微信和支付宝进行支付。安卓手机可以直接使用APP支付功能(APP支付和H5支付,只有两个参数不同而已,以及返回的参数格式不同,仅此而已)


H5支付流程


用户添加商品生成订单,选择支付宝支付方式,点击购买按钮,前端发送ajax请求到后端,后端调用支付宝统一下单接口生成预付单。对于H5支付返回的是一个表单的字符串(APP内支付是序列号的字符串),前端接收到直接复制给页面某个div,会自动调起支付宝APP进行支付,如下图:


网络异常,图片无法展示
|


网络异常,图片无法展示
|


H5统一下单接口


/**
     * 支付宝H5下单支付
     * @validate('OrderForm')
     * @throws \app\lib\exception\OrderException
     */
    public function aliH5Pay(Request $request)
    {
        $params = $request->param();
        //统一下单(进行调用订单模型创建订单表订单)
        $orderInfo = OrderModel::createOrder($params);
        //获取唤醒支付表单的字符串   (这里调用的是支付类,调用的则下面的方法)
        $sHtml = (new AliPay())->aliH5Pay($orderInfo);
        $result = [
            'order_info' => $orderInfo,
            'order_form' => $sHtml
        ];
        return writeJson(201, $result, '下单成功');
    }
     /**AliPay 类代码
     * 如果支付来源是h5,则进行生成h5代码
     * @param $params
     * @return array
     */
    public function aliH5Pay($params)
    {
        $this->signType = 'RSA2';//签名算法类型,支持RSA2和RSA,推荐使用RSA2
        $this->appId = config('alipay.app_id');
        $this->returnUrl = config('alipay.return_url');
        $this->notifyUrl = config('alipay.notify_url');
        $this->charset = 'UTF-8';
        $this->rsaPrivateKey = config('alipay.merchant_private_key');
        $this->totalFee = $params['pay_amount']; //付款金额,单位:元
        $this->orderNo = $params['order_no'];  //你自己的商品订单号,不能重复
        $this->orderName = '番鱼-' . $params['order_name'];  //订单标题
        //如果支付来源是h5,则进行生成h5代码
        $sHtml = $this->getOrderH5Str();
        return $sHtml;
    }
   /***AliPay 类代码
     *  如果支付来源是h5,则进行生成h5支付表单字符串代码
     * @return array
     */
    public function getOrderH5Str()
    {
        //请求参数
        $requestConfigs = array(
            'body' => $this->orderName,
            'out_trade_no' => $this->orderNo,
            'total_amount' => $this->totalFee, //单位 元
            'subject' => $this->orderName,  //订单标题
            'product_code' => 'QUICK_WAP_WAY', //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY
            'timeout_express' => '2h',       //该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
        );
        $commonConfigs = array(
            //公共参数
            'app_id' => $this->appId,
            'method' => 'alipay.trade.wap.pay',             //接口名称
            'format' => 'JSON',
            'charset' => $this->charset,
            'sign_type' => 'RSA2',
            'timestamp' => date('Y-m-d H:i:s'),
            'version' => '1.0',
            'notify_url' => $this->notifyUrl,
            'biz_content' => json_encode($requestConfigs),
        );
        $commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);
        $sHtml = $this->buildRequestForm($commonConfigs);
        return $sHtml;
    }
    public function generateSign($params)
    {
        return $this->sign($this->getSignContent($params), $this->signType);
    }
    /***AliPay 类代码
     * 建立请求,以表单HTML形式构造(默认)
     * @param $para_temp 请求参数数组
     * @return 提交表单HTML文本
     */
    public function buildRequestForm($para_temp)
    {
        $sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='https://openapi.alipay.com/gateway.do?charset=".$this->charset."' method='POST'>";
        foreach($para_temp as $key=>$val){
            if (false === $this->checkEmpty($val)) {
                $val = str_replace("'","&apos;",$val);
                $sHtml.= "<input type='hidden' name='".$key."' value='".$val."'/>";
            }
        }
        //submit按钮控件请不要含有name属性
        $sHtml = $sHtml."<input type='submit' value='ok' style='display:none;''></form>";
        $sHtml = $sHtml."<script>document.forms['alipaysubmit'].submit();</script>";
        return $sHtml;
    }


相关文章
|
3天前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
44 3
|
14天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
49 8
|
18天前
|
缓存 移动开发 小程序
uni-vue3-wetrip自创跨三端(H5+小程序+App)酒店预订app系统模板
vue3-uni-wetrip原创基于vite5+vue3+uniapp+pinia2+uni-ui等技术开发的仿去哪儿/携程预约酒店客房app系统。实现首页酒店展示、预订搜索、列表/详情、订单、聊天消息、我的等模块。支持编译H5+小程序+App端。
60 8
|
1月前
|
移动开发 小程序
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
仿青藤之恋社交交友软件系统源码 即时通讯 聊天 微信小程序 App H5三端通用
60 3
|
2月前
|
移动开发 小程序 数据可视化
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
基于npm CLI脚手架的uniapp项目创建、运行与打包全攻略(微信小程序、H5、APP全覆盖)
365 3
|
开发工具 数据安全/隐私保护 Android开发
app支付集成开发者指南
鉴于很多对接app支付的童鞋经常出现app支付系统繁忙,ali40247,订单信息异常在等等的错误,其实那些错误都是大同小异的,无非就是没权限,密钥不对,参数传值错误,请求信息拼接有问题等等,所以这边写app支付开发指南分享帖,希望能够帮到大家!!! 一、文档地址 app支付官方文档地址:[url]https://docs.
2033 12
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
733 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
767 1
|
4天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
45 11
|
2天前
|
前端开发 数据库 UED
uniapp开发,前后端分离的陪玩系统优势,陪玩app功能特点,线上聊天线下陪玩,只要4800
前后端分离的陪玩系统将前端(用户界面)和后端(服务器逻辑)分开开发,前者负责页面渲染与用户交互,后者处理数据并提供接口。该架构提高开发效率、优化用户体验、增强可扩展性和稳定性,降低维护成本,提升安全性。玩家可发布陪玩需求,陪玩人员发布服务信息,支持在线聊天、预约及线下陪玩功能,满足多样化需求。[演示链接](https://www.51duoke.cn/games/?id=7)

热门文章

最新文章