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 self与$this的详解
Jun 08 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
PHP中使用Imagick操作PSD文件实例
Jan 26 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
PHP实现微信提现功能
Sep 30 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 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
供参考的 php 学习提高路线分享
2011/10/23 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
javascript Base类 包含基本的方法
2009/07/22 Javascript
基于jquery的文章中所有图片width大小批量设置方法
2013/08/01 Javascript
js字符串操作方法实例分析
2015/05/06 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
Vue自定义图片懒加载指令v-lazyload详解
2020/12/31 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
python概率计算器实例分析
2015/03/25 Python
Python3.5编程实现修改IIS WEB.CONFIG的方法示例
2017/08/18 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python将txt文档每行内容循环插入数据库的方法
2018/12/28 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Python调用Windows命令打印文件
2020/02/07 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
服务员自我评价
2014/01/25 职场文书
结婚周年感言
2014/02/24 职场文书
建议书怎么写
2014/03/12 职场文书
母校寄语大全
2014/04/10 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
农业项目合作意向书
2015/05/08 职场文书
Python入门之基础语法详解
2021/05/11 Python
python之json文件转xml文件案例讲解
2021/08/07 Python
使用HttpSessionListener监听器实战
2022/03/17 Java/Android