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 10 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
Sep 30 PHP
php搜索文件程序分享
Oct 30 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
PHP常用工具类大全附全部代码下载
Dec 07 PHP
全面解读PHP的Yii框架中的日志功能
Mar 17 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
open_basedir restriction in effect. 原因与解决方法
Mar 14 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
香妃
2021/03/03 冲泡冲煮
PHP之变量、常量学习笔记
2008/03/27 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vue router 配置路由的方法
2018/07/26 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
JS实现拼图游戏
2021/01/29 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
vue使用element-ui实现表单验证
2020/12/13 Vue.js
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
python manage.py runserver流程解析
2019/11/08 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
英国电动工具购买网站:Anglia Tool Centre
2017/04/25 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
市场营销职业生涯规划书范文
2014/01/12 职场文书
社区志愿者活动总结
2014/06/26 职场文书
致运动员加油稿
2015/07/21 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
图解上海144收音机
2021/04/22 无线电
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python