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 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
解析php防止form重复提交的方法
Jul 01 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
常用的php图片处理类(水印、等比缩放、固定高宽)分享
Jun 19 PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
ZendFramework框架实现连接两个或多个数据库的方法
Dec 08 PHP
PHP实现浏览器中直接输出图片的方法示例
Mar 14 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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
CI框架数据库查询之join用法分析
2016/05/18 PHP
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
2013/10/20 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
JS库之Three.js 简易入门教程(详解之一)
2017/09/13 Javascript
十个免费的web前端开发工具详细整理
2017/09/18 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python中if __name__ == "__main__"详细解释
2014/10/21 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
django ajax json的实例代码
2018/05/29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
Python装饰器语法糖
2019/01/02 Python
Pycharm 设置默认头的图文教程
2019/01/17 Python
利用Python检测URL状态
2019/07/31 Python
基于MATLAB和Python实现MFCC特征参数提取
2019/08/13 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
基于opencv实现简单画板功能
2020/08/02 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
教育孩子心得体会
2014/01/01 职场文书
应届生求职自荐信
2014/07/04 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python