php 实现银联商务H5支付的示例代码


Posted in PHP onOctober 12, 2019

银联商务H5支付接口文档:文档地址

一:H5支付的接口地址:

1:支付宝支付

测试地址:http://58.247.0.18:29015/v1/netpay/trade/h5-pay

正式地址:https://api-mop.chinaums.com/v1/netpay/trade/h5-pay

2:银联支付

测试地址:http://58.247.0.18:29015/v1/netpay/uac/order

正式地址:https://api-mop.chinaums.com/v1/netpay/uac/order

二:接口需要的基本参数

接口使用的是get传参,直接将接口参数放到接口地址后,此接口是由浏览器直接跳转到接口

(1)authorization

认证方式,直接填入:OPEN-FORM-PARAM

(2)appId

银联商务用户H5支付产品的AppID

(3)timestamp

时间戳,格式为yyyyMMddHHmmss,如20191001121212

(4)nonce

随机数

(5)content

业务内容,为json格式,并且需要进行url编码,内部的具体信息下面介绍

(6)signature

签名,需要进行url编码,具体生成方式如:Base64_Encode(HmacSHA256(appId + timestamp + nonce + SHA256_HEX(content), AppKey))

业务内容content参数内部具体参数说明:

1:requestTimestamp

报文请求时间,格式为yyyy-MM-dd HH:mm:ss,如2019-10-01 12:12:12

2:merOrderId

商户自己生成的订单号,这里注意:我们需要在我们自己生成的订单号前面加上1017前缀

3:mid

银联商务用户H5支付产品的商户号

4:tid

银联商务用户H5支付产品的终端号

5:instMid

业务类型,直接填入:H5DEFAULT

6:totalAmount

支付总金额,单位为分

7:expireTime

订单过期时间,格式为yyyy-MM-dd HH:mm:ss,如2019-10-02 12:12:12

8:notifyUrl

支付结果通知地址

9:returnUrl

网页跳转地址

三:H5支付的支付宝支付实例

$appId = '10037e6f6a4e6da4016a670fd4530012';
$appKey = 'f7a74b6c02ae4e1e94aaba311c04acf2';
$mid = '898310148160568';
$tid = '88880001';
//业务内容
$time = time();
$content = [
  'requestTimestamp' => date('Y-m-d H:i:s', $time),//报文请求时间
  'merOrderId' => '1017' . date('YmdHis'),//商户订单号
  'mid' => $mid,//商户号
  'tid' => $tid,//终端号
  'instMid' => 'H5DEFAULT',//业务类型
  'totalAmount' => '1',//支付总金额
  'expireTime' => date('Y-m-d H:i:s', strtotime('+1 day', $time)),//过期时间
  'notifyUrl' => '',//支付通知地址
  'returnUrl' => ''//网页跳转地址
];
$timestamp = date('YmdHis', $time);
//随机数
$str = md5(uniqid(mt_rand(), true));
$uuid = substr($str, 0, 8) . '-';
$uuid .= substr($str, 8, 4) . '-';
$uuid .= substr($str, 12, 4) . '-';
$uuid .= substr($str, 16, 4) . '-';
$uuid .= substr($str, 20, 12);
$nonce = $uuid;
//签名
$hash = bin2hex(hash('sha256', json_encode($content), true));
$hashStr = $appId . $timestamp . $nonce . $hash;
$signature = base64_encode((hash_hmac('sha256', $hashStr, $appKey, true))); //$appKey银联商户H5支付产品的AppKey
$data = [
  'timestamp' => $timestamp,//时间戳
  'authorization' => 'OPEN-FORM-PARAM',//认证方式
  'appId' => $appId,//APPID
  'nonce' => $nonce,//随机数
  'content' => urlencode(json_encode($content)),//业务内容
  'signature' => urlencode($signature),//签名
];
//接口返回信息
//支付宝:http://58.247.0.18:29015/v1/netpay/trade/h5-pay
//银联在线无卡:http://58.247.0.18:29015/v1/netpay/qmf/h5-pay
//银联:http://58.247.0.18:29015/v1/netpay/uac/order
$options = '';
foreach ($data as $key => $value) {
  $options .= $key . '=' . $value .'&';
}
$options = rtrim($options, '&');
//存在转义字符,那么去掉转义
if(get_magic_quotes_gpc()){
  $options = stripslashes($options);
}
$url = 'http://58.247.0.18:29015/v1/netpay/trade/h5-pay?' . $options;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP模板引擎SMARTY
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
改变Apache端口等配置修改方法
Jun 05 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
PHP iconv 函数转gb2312的bug解决方法
Oct 11 PHP
PHP数组内存耗用太多问题的解决方法
Apr 05 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
Oct 25 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
Jun 04 PHP
php实现压缩多个CSS与JS文件的方法
Nov 11 PHP
php批量修改表结构实例
May 24 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 #PHP
Thinkphp5.0 框架视图view的比较标签用法分析
Oct 12 #PHP
Thinkphp5.0框架视图view的循环标签用法示例
Oct 12 #PHP
Thinkphp5.0 框架实现控制器向视图view赋值及视图view取值操作示例
Oct 12 #PHP
php服务器的系统详解
Oct 12 #PHP
laravel框架 api自定义全局异常处理方法
Oct 11 #PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 #PHP
You might like
不用数据库的多用户文件自由上传投票系统(1)
2006/10/09 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
php基于Redis消息队列实现的消息推送的方法
2018/11/28 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
2015/08/06 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
React全家桶环境搭建过程详解
2018/05/18 Javascript
在vue中使用公共过滤器filter的方法
2018/06/26 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python+pygame实现坦克大战
2019/09/10 Python
python3 mmh3安装及使用方法
2019/10/09 Python
python爬虫添加请求头代码实例
2019/12/28 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
大学生村官事迹材料
2014/01/21 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
综合测评自我评价
2015/03/06 职场文书
物业客服专员岗位职责
2015/04/07 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS