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 02 PHP
关于Zend Studio 配色方案插件的介绍
Jun 24 PHP
解析php多线程下载远程多个文件
Jun 25 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php判断数组中是否存在指定键(key)的方法
Mar 17 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
windows下安装php的memcache模块的方法
Apr 07 PHP
php比较相似字符串的方法
Jun 05 PHP
PHP自毁程序(慎用)
Jul 09 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 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教程孙仲岳主讲
2008/01/07 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
jquery animate 动画效果使用说明
2009/11/04 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery动态生成不规则表格(前后端)
2017/02/21 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
element中table高度自适应的实现
2020/10/21 Javascript
python文件比较示例分享
2014/01/10 Python
Python生成验证码实例
2014/08/21 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python实现机器学习之多元线性回归
2018/09/06 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
初一学生评语大全
2014/04/24 职场文书
网络技术专业求职信
2014/05/02 职场文书
销售员岗位职责范本
2015/04/11 职场文书
小学生暑假安全公约
2015/07/14 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
php去除deprecated的实例方法
2021/11/17 PHP