android 怎么实现手机网站支付_PHP实现手机网站支付(兼容微信浏览器)

news/2024/5/20 4:35:48/文章来源:https://blog.csdn.net/weixin_35744893/article/details/112137127
23927d21aab70952bf75a77433cabec6.png

php中文网最新课程

每日17点准时技术干货分享

904128ded2f8a5331567b087706b76a3.png

a2c38381e6a5a383a9c35c6736841abf.gif

网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入支付宝支付的带来些许帮助和借鉴意义。

一个PHP文件搞定支付宝系列:https://github.com/dedemao/alipay一个PHP文件搞定微信支付系列:https://github.com/dedemao/weixinPay

在手机浏览器下打开实现效果

76d53c8ac09a0c5b66f68c820bd54cb9.png

3800fceee9a897d9934145aa082404b2.png

在微信中打开实现效果

4aea92a568de655ab2d1db562825d40f.png

注:兼容微信浏览器需依赖支付宝官方提供的demo(alipay_in_weixin_demo)中的两个文件,即:ap.js及pay.htm

环境依赖

PHP5.0以上,且需要开启CURL服务、SSL服务。

如需兼容微信浏览器,还需依赖ap.js及pay.htm。

注意事项

1.文件开头的配置信息必须完善 
2.商户私钥需填写对应签名算法类型的私钥,如何生成密钥参考: 

https://docs.open.alipay.com/291/105971 https://docs.open.alipay.com/200/105310

代码

<?php header('Content-type:text/html; Charset=utf-8');$appid = 'xxxxx';  //https://open.alipay.com 账户中心->密钥管理->开放平台密钥,填写添加了电脑网站支付的应用的APPID$returnUrl = 'http://www.xxx.com/alipay/return.php';     //付款成功后的同步回调地址$notifyUrl = 'http://www.xxx.com/alipay/notify.php';     //付款成功后的异步回调地址$outTradeNo = uniqid();     //你自己的商品订单号$payAmount = 0.01;          //付款金额,单位:元$orderName = '支付测试';    //订单标题$signType = 'RSA2';       //签名算法类型,支持RSA2和RSA,推荐使用RSA2//商户私钥,填写对应签名算法类型的私钥,如何生成密钥参考:https://docs.open.alipay.com/291/105971和https://docs.open.alipay.com/200/105310$saPrivateKey='MIIEpAIBAAKCAQEA1MV+OY6MvGfXPM0MkpjT+FdzGmPOvVmX2wF3gjwQpeHBEUP9jLXhVS32fZ1iXI1e7WUGQ5tvXn28P8190kpOn/c/G5t2CAksUvemvF7uJN/N3Z1HFMdt3omvCd14K05lgcFYz7Z4c+A7ZJF5bPCB6oshjjUmbCY3hibuWzX/1j8AgsoD9lLyxoFqxLj98k5ZrYIhk900gMQs/WJ3A1FC09Dln9fuhBUyjtPHaml+4w+sdkdzxPktxdFrMcI7M7rNEwg25XtST5Z49oFpE84AlXM7+oC9jYvIpTGE00WomsgtakN039ucT/59Bup6pLkO08Rv85UXbqzGTcYAhNHLfQIDAQABAoIBAQCbuPM58s+j8KgB8ty5yiqRPoeaj+O2h4Txn7A02/sfPQvNtCI0wsTpT5twsihULo+EVYTxJCitUn7df2sP5pyGzTEd5njLRtNu4Zvhj+Thjf1grERiu9b4oXI/WRzjLRxzi+uREi40OK+fWi0xgxDCdROY/eNiEdJfV8zpaqsUxG7VdwZIJQ/8d3Mi31OWv30kr9jfEd15DBInGJgSqR+qwrAB4pBSMcW8hL6PYlzoPi1ygceFjRrnbeMG40zt0OUPSexQIgAmFvGqxTl5xo3dFEziGHdfWYsBKZ2M8ubAe+R6LcndxI+o2Hw4TNcC1tDeNMtjw7+h9S5aef5A8uWBAoGBAPxCLWPhUHCYlIXUz0D1SoolZs9WK7Kz1YSWnzqrpegN+foS5/ji93YylGE+KL31TwbnGQLAwknwMX3qTzmkvTovmy8jevXBsCSEFm81q0wG/35e1SKkTXL66RqB2y0xFLdcF3f9s8ZiEclqkYwNSHh0nqzREfIxMMAsj+3n2vHdAoGBANftYkZYrbs4iI/ZcjmBYguYikNfNmrD+Ta6ckOGZqsHfwXJCAz1rF4/XCqVAc9nxuzJR/72qkn9z07uH6qSZCqlZDRki2KaK2UVqFDB+0abMk/TGHXuMmdvMkyj2jEZxG2rkg0kmg4qYkkg/5tGG1On/0GeZNVPu8JpsFr1pDYhAoGBANr8pCTKC6fDfWP1C3qrtmrY7zhc6RB4d4pjq5UmP5+EypaiZQi2F/dfD1qfuIS3eURXyGmQZtoDDyPtDZvP/ImPnFs+pNbFryD0HfmrEKquhIvyzXoGQknnsgbV5iyEKCTJaII9FxzINAKzZei7+0a+jqUd1kN3Gogp50Sze2ltAoGARaM5Xpaa8RZ6dGocfI9Nn4/Ch5fdZPFvHkdjMoPV+LKiNKtw/Tz+KiclAlasDsfZT+RaY9AJe3NvuHTzoX807swIVR1Xr3EpLaCed+0XrN3AjB34dZAskU87WZw+cjdtMjFzGOoFBSyGJi+OP/WMOp6jo/YBbwoX88tCJROzsgECgYAT8pHHIyPt5Y/5pDb8EDvD3XNES1fBkfZffSoAodsrkeoKgrsKl+9M3rcGX+S9dscyoH0ur3BFTMHtIOOhC5qytt+BhMHIP5mAs4di4u/joQCWQbUyrUggVK5it+6BFgAT+jeB7zTAUtgGpTVFq3kLbV0NZ+XQyEHVlnoJnHYpQg==';$aliPay = new AlipayService($appid,$returnUrl,$notifyUrl,$saPrivateKey);$payConfigs = $aliPay->doPay($payAmount,$outTradeNo,$orderName,$returnUrl,$notifyUrl);class AlipayService{    protected $appId;    protected $returnUrl;    protected $notifyUrl;    protected $charset;    //私钥值    protected $rsaPrivateKey;    public function __construct($appid, $returnUrl, $notifyUrl,$saPrivateKey){        $this->appId = $appid;        $this->returnUrl = $returnUrl;        $this->notifyUrl = $notifyUrl;        $this->charset = 'utf8';        $this->rsaPrivateKey=$saPrivateKey;    }    /**     * 发起订单     * @param float $totalFee 收款总费用 单位元     * @param string $outTradeNo 唯一的订单号     * @param string $orderName 订单名称     * @param string $notifyUrl 支付结果通知url 不要有问号     * @param string $timestamp 订单发起时间     * @return array     */    public function doPay($totalFee, $outTradeNo, $orderName, $returnUrl,$notifyUrl){        //请求参数        $requestConfigs = array(            'out_trade_no'=>$outTradeNo,            'product_code'=>'QUICK_WAP_WAY',            'total_amount'=>$totalFee, //单位 元            'subject'=>$orderName,  //订单标题        );        $commonConfigs = array(            //公共参数            'app_id' => $this->appId,            'method' => 'alipay.trade.wap.pay',             //接口名称            'format' => 'JSON',            'return_url' => $returnUrl,            'charset'=>$this->charset,            'sign_type'=>'RSA2',            'timestamp'=>date('Y-m-d H:i:s'),            'version'=>'1.0',            'notify_url' => $notifyUrl,            'biz_content'=>json_encode($requestConfigs),        );        $commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs['sign_type']);        return $commonConfigs;    }    public function generateSign($params, $signType = "RSA") {        return $this->sign($this->getSignContent($params), $signType);    }    protected function sign($data, $signType = "RSA") {        $priKey=$this->rsaPrivateKey;        $res = "-----BEGIN RSA PRIVATE KEY-----\n" .            wordwrap($priKey, 64, "\n", true) .            "\n-----END RSA PRIVATE KEY-----";        ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置');        if ("RSA2" == $signType) {            openssl_sign($data, $sign, $res, version_compare(PHP_VERSION,'5.4.0', ') ? SHA256 : OPENSSL_ALGO_SHA256); //OPENSSL_ALGO_SHA256是php5.4.8以上版本才支持        } else {            openssl_sign($data, $sign, $res);        }        $sign = base64_encode($sign);        return $sign;    }    /**     * 校验$value是否非空     *  if not set ,return true;     *    if is null , return true;     **/    protected function checkEmpty($value) {        if (!isset($value))            return true;        if ($value === null)            return true;        if (trim($value) === "")            return true;        return false;    }    public function getSignContent($params) {        ksort($params);        $stringToBeSigned = "";        $i = 0;        foreach ($params as $k => $v) {            if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {                // 转换成目标字符集                $v = $this->characet($v, $this->charset);                if ($i == 0) {                    $stringToBeSigned .= "$k" . "=" . "$v";                } else {                    $stringToBeSigned .= "&" . "$k" . "=" . "$v";                }                $i++;            }        }        unset ($k, $v);        return $stringToBeSigned;    }    /**     * 转换字符集编码     * @param $data     * @param $targetCharset     * @return string     */    function characet($data, $targetCharset) {        if (!empty($data)) {            $fileType = $this->charset;            if (strcasecmp($fileType, $targetCharset) != 0) {                $data = mb_convert_encoding($data, $targetCharset, $fileType);            }        }        return $data;    }}function isWeixin(){    if ( strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger') !== false ) {        return true;    }    return false;}$queryStr = http_build_query($payConfigs);if(isWeixin()):?><script type="text/javascript" src="ap.js">script><script>    var gotoUrl = 'https://openapi.alipay.com/gateway.do?=$queryStr?>';    _AP.pay(gotoUrl);script><?php     else:        header("Location:https://openapi.alipay.com/gateway.do?{$queryStr}");    endif;?>

f0c587cb083b49d4c4a2b8a5ee386315.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_742396.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

a.diguo.in click.php,帝国cms网站管理系统V4.7 DIGG的实现(顶踩实现)

前言&#xff1a;DIGG顶及踩踏可以实现用户之间的信息交流互动。实现要点&#xff1a;系统本身就内置了digg的功能&#xff0c;只是没有在数据表中直接内置digg字段&#xff0c;所以我们只需增加digg的字段就可以实现顶与踩踏的功能。(为什么不内置所有会使用到的字段呢?主要是…

java stie:baiducom_网站资源快速收录----百度API提交Java版,百度API网站资源提交小程序版...

API提交什么是API推送最为快速的提交方式&#xff0c;建议您将站点当天新产出链接立即通过此方式推送给百度&#xff0c;以保证新链接可以及时被百度收录。API推送的优点及时发现&#xff1a; 可以缩短百度爬虫发现您站点新链接的时间&#xff0c;使新发布的页面可以在第一时间…

MVC5 网站开发之六 管理员 1、登录、验证和注销

上次业务逻辑和展示层的架构都写了&#xff0c;可以开始进行具体功能的实现&#xff0c;这次先实现管理员的登录、验证和注销功能。 目录 奔跑吧&#xff0c;代码小哥&#xff01; MVC5网站开发之一 总体概述 MVC5 网站开发之二 创建项目 MVC5 网站开发之三 数据存储层功能实现…

IIS管理器如何添加网站

IIS服务器一些步骤 安装好iis后右击网站按钮点击添加网站网站名称填写无所谓&#xff0c;物理路径&#xff08;注意是大路径&#xff0c;一个项目所有的文件在那个文件夹下&#xff09;&#xff0c;Ip地址自己定义最好是hosts文件已经绑定了域名的&#xff0c;这样容易记&#…

从零开始用 Flask 搭建一个网站(一)

2019独角兽企业重金招聘Python工程师标准>>> 前言 笔者之前未接触过 Python&#xff0c;只是略懂一点前端&#xff0c;所以说从零开始也相差无几吧。Flask 是一个轻量级的基于 Python 的框架&#xff0c;但是扩展性非常良好&#xff08;Github 上 22000 多个 star 就…

在RHEL、CentOS上安装建站神器Drupal 8

2019独角兽企业重金招聘Python工程师标准>>> Drupal 是一个开源&#xff0c;灵活&#xff0c;高度可拓展和安全的内容管理系统Content Management System(CMS)&#xff0c;使用户轻松的创建网站。 它可以使用模块拓展&#xff0c;使用户将内容管理转换为强大的数字解…

如何更有效使用Rational AppScan 扫描大型网站

Rational AppScan 工作原理 Rational AppScan&#xff08;简称 AppScan&#xff09;其实是一个产品家族&#xff0c;包括众多的应用安全扫描产品&#xff0c;从开发阶段的源代码扫描的 AppScan source edition&#xff0c;到针对 Web 应用进行快速扫描的 AppScan standard edit…

值得推荐的十大交互式可视化的网站

厌倦了静态图表&#xff0c;最近一直在看一些关于可以交互的数据可视化的案例&#xff0c;整理了一些有趣的交互式可视化的网站分享给大家。 01 Matt Daniels The Lasting Mark of Miles Davi 关于维基百科里提到“黑暗王子”迈尔斯戴维斯的页面次数统计&#xff0c;来证明这个…

云服务器 ECS 建站教程:Discuz安装教程

Discuz安装教程Discuz! 是全球成熟度最高、覆盖率最大的论坛软件系统之一。自 2001 年 6 月面世以来&#xff0c;Discuz! 已拥有 15 年以上的应用历史和 200 多万网站用户案例。目前&#xff0c;Discuz! 已经发展成为一个以社区为基础的专业建站平台&#xff0c;让论坛&#xf…

网站开发需要哪些技术_app开发需要哪些技术?4种app制作方法对比

开发一个完整的app需要哪些技术&#xff1f;App开发的到底要多少钱&#xff1f;如何简单快速低成本的开发app&#xff1f;现在&#xff0c;市场上的app开发可以分为4种不同的app开发方式&#xff0c;不同的app开发方式&#xff0c;对app技术、开发人员、开发成本、开发周期的要…

网站页面左右_网站优化都包括什么

SEO优化主要包括四个方向:内部结构优化&#xff0c;内容优化&#xff0c;内部链优化和外部链优化。 一&#xff0c;优化内部结构 1.TDK优化:此TDK不仅包括首页&#xff0c;还包括角页和文章页的TDK。因此&#xff0c;建议您在创建站点时自定义标签。T也就是title&#xff0c;网…

网站开发必备-快速浏览Asp.Net网站绿色小工具

< DOCTYPE html PUBLIC -WCDTD XHTML TransitionalEN httpwwwworgTRxhtmlDTDxhtml-transitionaldtd> 选择此工具的理由&#xff1a;1.快速浏览Asp.Net网站 2.小巧 3.绿色 点击下载 前提&#xff0c;系统必须安装 .NET Framework 方法一. 将此程序放在网站根目录&#xff…

一步一步SharePoint 2007之十九:解决实现注册用户后,自动具备访问网站的权限的问题(1)——配置Provider...

考虑到实现注册用户后&#xff0c;自动具备访问网站的权限的文章共有近20幅截图&#xff0c;截图总大小近2M&#xff0c;为了尽量减少打开网页的时间&#xff0c;本篇文章将被分割成几个小的部分。因此而给大家带来的阅读不便&#xff0c;就请海涵了:)解决这个问题&#xff0c;…

网站服务器c盘在哪找,云服务器c盘在哪儿

云服务器c盘在哪儿 内容精选换一换根据磁盘ID&#xff0c;查询云服务器挂载的单个磁盘信息。GET /v2.1/{project_id}/servers/{server_id}/os-volume_attachments/{volume_id}参数说明请参见表1。参数说明参数是否必选描述project_id是项目ID。获取方法请参见获取项目ID。serve…

后台控制其他域名显示_SiteGround域名解析教程 | 如何将NameSilo 域名绑定到WordPress外贸网站...

我们在新购买的Siteground主机上成功安装Wordpress程序之后&#xff0c;下一步就是完成 Siteground 域名解析。你在浏览器中访问你的域名是无法正常打开网站的&#xff0c;这是因为&#xff0c;我们还没有把域名解析到Siteground的主机上。如下图&#xff0c;因为域名还未解析到…

搭建好域名服务器怎么设计网页,使用域名建站的几个步骤

相信大家都知道&#xff0c;建站第一步就是注册域名&#xff0c;然后购买主机服务器之类的&#xff0c;那么怎么使用域名去搭建网站呢?第一步&#xff1a;域名注册域名注册就是选一个合适自己的网址&#xff0c;域名非常重要&#xff0c;是我们迈出建站的第一步&#xff0c;也…

hive 的数据案例 统计网站的数据信息

根据hive的案例一增加需求一&#xff1a; 增加案例需求&#xff1a; 统计 pv , uv , 登录人数 , 游客人数 , 平均访问时长 , 二跳率 , 独立IP 用一张表去处理 1.1 查看track_log的分区 show partitions track_log ; 1.2 建立一张会话信息表&#xff08;session&#xff09;&am…

django搭建一个小型的服务器运维网站-最简单的实践之修改服务器时间

目录 项目介绍和源码&#xff1b; 拿来即用的bootstrap模板&#xff1b; 服务器SSH服务配置与python中paramiko的使用&#xff1b; 用户登陆与session;最简单的实践之修改服务器时间&#xff1b; 查看和修改服务器配置与数据库的路由&#xff1b; 基于websocket的实时日志实现&…

网站漏洞修复方案防止SQL注入攻击漏洞

SQL注入漏洞在网站漏洞里面属于高危漏洞&#xff0c;排列在前三&#xff0c;受影响范围较广&#xff0c;像asp、.net、PHP、java、等程序语言编写的代码&#xff0c;都存在着sql注入漏洞&#xff0c;那么如何检测网站存在sql注入漏洞&#xff1f; SQL注入漏洞测试方法 在程序代…

phpcms ajax加载列表,phpcms v9建站 ajax列表分页加载更多word文档教程

最新文章https: open weixin qq com 有这个的账号&#xff0c;给客户开通微信小程序不需要认证费直...https: open weixin qq com 有这个的账号&#xff0c;给客户开通微信小程序不需要认证费直...相关内容phpcms调用随机栏目 随机调用SQL语句&#xff0c;可以使用PHPCMS的get标…