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 相关文章推荐
实用函数3
Nov 08 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
php将会员数据导入到ucenter的代码
Jul 18 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
php while循环控制的简单实例
May 30 PHP
php实现学生管理系统
Mar 21 PHP
PHP请求远程地址设置超时时间的解决方法
Oct 29 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
php探针使用原理和技巧讲解
Sep 17 PHP
PHP tp5中使用原生sql查询代码实例
Oct 28 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
html中select语句读取mysql表中内容
2006/10/09 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
PHP连接MySQL进行增、删、改、查操作
2017/02/19 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
很多人都是用下面的js刷新站IP和PV
2008/09/05 Javascript
JavaScript中的View-Model使用介绍
2011/08/11 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
一个炫酷的Bootstrap导航菜单
2016/12/28 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
ReactJS实现表单的单选多选和反选的示例
2017/10/13 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
python suds访问webservice服务实现
2020/06/26 Python
Python中return函数返回值实例用法
2020/11/19 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
美特斯邦威官方商城:邦购网
2016/10/13 全球购物
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
比较一下entity bean和session bean
2013/12/27 面试题
大学同学十年聚会感言
2014/02/21 职场文书
青岛导游词
2015/02/12 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
Python+tkinter实现高清图片保存
2022/03/13 Python