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编程开发“虚拟域名”系统
Oct 09 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
May 26 PHP
PHP Undefined index报错的修复方法
Jul 17 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
php中Array2xml类实现数组转化成XML实例
Dec 08 PHP
PHP中error_log()函数的使用方法
Jan 20 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP二维数组去重算法
Dec 17 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP使用Session实现上传进度功能详解
Aug 06 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
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
回车直接实现点击某按钮的效果即触发单击事件
2014/02/27 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
深入理解webpack process.env.NODE_ENV配置
2020/02/23 Javascript
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
Python unittest单元测试框架实现参数化
2020/04/29 Python
Python和Bash结合在一起的方法
2020/11/13 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
Python爬虫中Selenium实现文件上传
2020/12/04 Python
实习自我评价怎么写
2013/12/02 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
python的html标准库
2022/04/29 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技
PostgreSQL之连接失败的问题及解决
2023/05/08 PostgreSQL