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 开发工具
Dec 06 PHP
PR值查询 | PageRank 查询
Dec 20 PHP
通过具体程序来理解PHP里面的抽象类
Jan 28 PHP
php Static关键字实用方法
Jun 04 PHP
基于php冒泡排序算法的深入理解
Jun 09 PHP
Php中使用Select 查询语句的实例
Feb 19 PHP
使用URL传输SESSION信息
Jul 14 PHP
PHP APP微信提现接口代码
Sep 30 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
php实现微信分享朋友链接功能
Feb 18 PHP
PHP+Ajax简单get验证操作示例
Mar 02 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/09/23 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
thinkPHP内置字符串截取函数用法详解
2016/11/15 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
JavaScript版DateAdd和DateDiff函数代码
2012/03/01 Javascript
JS等比例缩小图片尺寸的实例
2013/02/27 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)
2015/12/01 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
理解JavaScript原型链
2016/10/25 Javascript
实例讲解DataTables固定表格宽度(设置横向滚动条)
2017/07/11 Javascript
bootstrap table插件的分页与checkbox使用详解
2017/07/23 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
详解vue v-model
2020/08/31 Javascript
Python爬虫包 BeautifulSoup  递归抓取实例详解
2017/01/28 Python
Python使用剪切板的方法
2017/06/06 Python
Python中的默认参数实例分析
2018/01/29 Python
python计算两个地址之间的距离方法
2018/06/09 Python
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
基于python实现百度翻译功能
2019/05/09 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
TensorFLow 不同大小图片的TFrecords存取实例
2020/01/20 Python
python如何代码集体右移
2020/07/20 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
一文彻底解决HTML5页面中长按保存图片功能
2019/06/10 HTML / CSS
自荐信的基本格式
2014/02/22 职场文书
入党综合考察材料
2014/06/02 职场文书
企业文化标语大全
2014/06/10 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
《槐乡的孩子》教学反思
2016/02/20 职场文书
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android
git stash(储藏)的用法总结
2022/06/25 Servers