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 相关文章推荐
杏林同学录(三)
Oct 09 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
html静态页面调用php文件的方法
Nov 13 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
php 数据结构之链表队列
Oct 17 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP两个n位的二进制整数相加问题的解决
Aug 26 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 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堆排序实现原理与应用方法
2015/01/03 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
JSONP 跨域共享信息
2012/08/16 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
基于jQuery的JavaScript模版引擎JsRender使用指南
2014/12/29 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
JS实现简单的键盘打字的效果
2015/04/24 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
实例解析Array和String方法
2016/12/14 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
详解vue 数组和对象渲染问题
2018/09/21 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
pm2启动ssr失败的解决方法
2019/06/29 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
在vue中使用image-webpack-loader实例
2020/11/12 Javascript
[49:35]2018DOTA2亚洲邀请赛3月30日 小组赛A组 KG VS TNC
2018/03/31 DOTA
使用Python的PIL模块来进行图片对比
2016/02/18 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python自动发邮件总结及实例说明【推荐】
2019/05/31 Python
Python tornado上传文件的功能
2020/03/26 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
html5 input输入实时检测以及延时优化
2018/07/18 HTML / CSS
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
教师自我评价范例
2013/09/24 职场文书
旅游管理专业生自荐信范文
2014/01/02 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
天猫活动策划方案
2014/08/21 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书