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+javascript实现二级级联菜单的制作
May 06 PHP
php学习 字符串课件
Jun 15 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP模拟asp中response类实现方法
Aug 08 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
PHP错误处理函数
Apr 03 PHP
php+ajax登录跳转登录实现思路
Jul 31 PHP
php中get_magic_quotes_gpc()函数说明
Feb 06 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
Apr 05 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 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
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP实现下载功能的代码
2012/09/29 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
2018/11/29 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
javascript全局变量封装模块实现代码
2012/11/28 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
javascript利用键盘控制小方块的移动
2020/04/20 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
python与C互相调用的方法详解
2017/07/14 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python实现微信自动回复机器人功能
2019/07/11 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
厂区绿化方案
2014/05/08 职场文书
研修心得体会
2014/09/04 职场文书
办公室主任个人对照检查材料思想汇报
2014/10/11 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
六年级上册《闻官军收河南河北》的教学设计
2019/11/15 职场文书
js Proxy的原理详解
2021/05/25 Javascript