接口--php对接农行网上支付平台-b2b_anyun3065的博客-程序员秘密

技术标签: php  

 

对接农行网上支付平台

从银行那边获取到对应的接口包

将文件保存在网站的路径中

我是destoon网站系统对接,就放在了api/pay/新建一个文件夹abc/下

完成之后填写接口的配置文件

路径:ebusclient/TrustMerchant.ini

标出的内容  都是需要填写的   对应的证书,联系银行要

配置完成之后  访问测试文件确定是否安装正确

 

 

在接下来就是交易流程

首先仿照对应demo从自己的网站中获取接口需要的所有信息  例我在desoon中只需要对接支付充值 因为本身dt的第三方支付就是充值,所以我只需要按照农行接口需要的信息提供就可以了  如代码

<?php
defined('IN_DESTOON') or exit('Access Denied');
require DT_ROOT.'/api/pay/'.$bank.'/ebusclient/PaymentRequest.php';

$tRequest = new PaymentRequest();

$tRequest->order["PayTypeID"] = "ImmediatePay"; //设定交易类型
$tRequest->order["OrderNo"] = "$orderid"; //设定订单编号
$tRequest->order["ExpiredDate"] = ""; //设定订单保存时间
$tRequest->order["OrderAmount"] = "$charge"; //设定交易金额
$tRequest->order["Fee"] = "$fee"; //设定手续费金额
$tRequest->order["CurrencyCode"] = "156"; //设定交易币种
$tRequest->order["ReceiverAddress"] = ""; //收货地址
$tRequest->order["InstallmentMark"] = "0"; //分期标识
$tRequest->order["CommodityType"] = "0201"; //设置商品种类
$tRequest->order["BuyIP"] = ""; //IP
$tRequest->order["orderTimeoutDate"] = ""; //设定订单有效期
$tRequest->order["OrderDesc"] = "网站充值"; //设定订单说明
$tRequest->order["OrderURL"] = ""; //设定订单地址

$time1 = str_replace('-', '/', timetodate($DT_TIME,3));
$time = explode(' ', timetodate($DT_TIME,6));
$time2 = $time[1];
$tRequest->order["OrderDate"] = $time1; //设定订单日期 (必要信息 - YYYY/MM/DD)
$tRequest->order["OrderTime"] = $time2 ; //设定订单时间 (必要信息 - HH:MM:SS)

//2、订单明细
$orderitem = array ();
$orderitem["ProductName"] = "网站充值"; //商品名称
$tRequest->orderitems[0] = $orderitem;

//3、生成支付请求对象
$tRequest->request["PaymentType"] = "A"; //设定支付类型
if($DT_PC){
    $tRequest->request["PaymentLinkType"] = "1"; //设定支付接入方式
}else {
    $tRequest->request["PaymentLinkType"] = "2"; //设定支付接入方式
}

/*
if (isset($_POST['PaymentType']) && isset($_POST['PaymentLinkType']) && $_POST['PaymentType'] === "6" && $_POST['PaymentLinkType'] === "2") {
    $tRequest->request["UnionPayLinkType"] = ($_POST['UnionPayLinkType']); //当支付类型为6,支付接入方式为2的条件满足时,需要设置银联跨行移动支付接入方式
}
*/
$tRequest->request["ReceiveAccount"] = ""; //设定收款方账号
$tRequest->request["ReceiveAccName"] = ""; //设定收款方户名
$tRequest->request["NotifyType"] = "1"; //设定通知方式
$tRequest->request["ResultNotifyURL"] = 'http://www.ceshi.cn/api/pay/abc/notify.php'; //设定通知URL地址
$tRequest->request["MerchantRemarks"] = ""; //设定附言
$tRequest->request["IsBreakAccount"] = "0"; //设定交易是否分账
$tRequest->request["SplitAccTemplate"] = ""; //分账模版编号 


$tResponse = $tRequest->postRequest();
/*print_r($tResponse);
exit('test11');
var_dump($tResponse);exit;*/

if ($tResponse->isSuccess()) {
    // print ("<br>Success!!!" . "</br>");
    // print ("ReturnCode   = [" . $tResponse->getReturnCode() . "]</br>");
    // print ("ReturnMsg   = [" . $tResponse->getErrorMessage() . "]</br>");
    $PaymentURL = $tResponse->GetValue("PaymentURL");
    // var_dump($PaymentURL);exit;
    // print ("<br>PaymentURL=$PaymentURL" . "</br>");
    echo "<script language='javascript'>";
    echo "window.location.href='$PaymentURL'";
    echo "</script>";
} else {
    print ("<br>Failed!!!" . "</br>");
    print ("ReturnCode   = [" . $tResponse->getReturnCode() . "]</br>");
    print ("ReturnMsg   = [" . $tResponse->getErrorMessage() . "]</br>");
}


?>

其中的有些参数直接写死

上面的代码就是把信息打包好发给农行  农行会返回一个支付链接 浏览器会自动跳转到链接

再完了之后就是接受返回的信息 接口文档中有说明

 

demo中有示例文件

获取到返回的信息之后  就可以自己处理了   修改本地的支付状态  等等

例我在destoon中的

 

<?php

require '../../../common.inc.php';

$bank = 'abc';
require DT_ROOT.'/api/pay/'.$bank.'/ebusclient/Result.php';
$PAY = cache_read('pay.php');
//1、取得MSG参数,并利用此参数值生成验证结果对象

$tResult = new Result();
$tResponse = $tResult->init($_POST['MSG']);

if ($tResponse->isSuccess()) {
    
    $order = $tResponse->getValue("OrderNo");
    $amount = $tResponse->getValue("Amount");
    $r = $db->get_one("SELECT * FROM {$DT_PRE}finance_charge WHERE itemid='$order'");
    if($r){
        if($r['status'] == 0) {
            $charge_orderid = $r['itemid'];
            $charge_money = $r['amount'] + $r['fee'];
            $charge_amount = $r['amount'];
            $editor = 'L'.$bank;
            if($amount == $charge_money){
                require DT_ROOT.'/api/pay/success.inc.php';
                $rtnUrl = $MODULE[2]['linkurl'].'charge.php';
                echo "<script language='javascript'>";
                echo "window.location.replace('$rtnUrl')";
                echo "</script>";
            } else {
                $note = '充值金额不匹配S:'.$charge_money.'R:'.$amount;
                $db->query("UPDATE {$DT_PRE}finance_charge SET status=1,receivetime='$DT_TIME',editor='$editor',note='$note' WHERE itemid=$charge_orderid");//支付失败
                log_write($note, 'labc');
                exit('error');
            }
        }else if($r['status'] == 1) {
            exit('error');
        } else if($r['status'] == 2) {
            exit('error');
        } else {
            $rtnUrl = $MODULE[2]['linkurl'].'charge.php';
            echo "<script language='javascript'>";
            echo "window.location.replace('$rtnUrl')";
            echo "</script>";
        }    
    }
} else {
    exit('error');
}
?>

以上基本就完工了 

友情提示  浏览器一定要用ie

踩过的坑  跳转到农行支付页面一直不成功  配置信息填写有问题

      返回的信息一直抓不到,日志一步一步扒  总会找到错到哪儿了

 

转载于:https://www.cnblogs.com/lx0715/p/9370997.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/anyun3065/article/details/101364937

智能推荐

JavaScript学习笔记(DOM编程案例)_少不入川。的博客-程序员秘密

文章目录1.前言2.实例2.1 获取文本框的value2.2 通过innerText和innerHTML来操作div和span2.3 关于正则表达式2.4 使用正则表达式验证邮箱地址2.5 使用正则表达式去除字符串前后的空白2.6 表单验证2.7 复选框的全选和取消全选2.8 获取下拉列表选中项的value2.9 显示系统时间2.10 内置支持类:Array1.前言1、JavaScript包括三大块:ECMAScript:JS的核心语法(ES规范 / ECMA-262标准)DOM:Document

JAVA-25.2-js提高篇、BOM编程、事件编程、DOM编程、js正则表达式、表单验证案例_元_帅的博客-程序员秘密

一、BOM编程  什么是BOM编程?BOM是(Broswer Object Model) 浏览器对象模型编程 1.window对象   open(): 在一个窗口中打开页面     参数一: 打开的页面     参数二:打开的方式。 _self: 本窗口 _blank: 新窗口(默认)     参数三: 设置窗口参数。比如窗口大小   setInterval(): 设置定时器(执行n次

JS DOM编程_Y__J___的博客-程序员秘密

获取文本框&lt;!DOCTYPE html&gt;&lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;title&gt;DOM编程-获取文本框的value&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;script type="text/javascript"&gt...

Web APls_让我再睡会儿呗的博客-程序员秘密

2022.3.26 学习笔记目录四、正则表达式4.1 概述4.2 创建正则表达式的对象4.3 检验是否符合正则表达式4.4 使用字面量创建正则表达式4.4.1 语法: var 变量 = /正则表达式/匹配模式4.4.2 创建一个正则表达式,检查一个字符串中是否含有‘a’或‘b’4.5 字符串和正则表达式相关的方法4.5.1 split( ) 可以将一个字符串拆分成一个数组4.5.2 search( ) 可以搜索字符串中是否含有指定内容4.5.3 match(

JavaScript(二)--BOM编程/事件编程/DOM编程/正则表达式_yangruxi的博客-程序员秘密

BOM编程1.BOM编程图解: 2.window对象: open():在一个窗口中打开页面 参数一: 打开的页面 参数二:打开的方式。 _self: 本窗口 _blank: 新窗口(默认) 参数三: 设置窗口参数。比如窗口大小setInterval():设置定时器(执行n次) setTimeout():设置定时器(只执行1次) 定时器: 每隔n毫秒调用指定的任务(函数) 参数一:指

防火墙的web配置_Sun.1998的博客-程序员秘密_web应用防火墙配置

防火墙:它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,防火墙就是一个位于计算机和它所连接的网络之间的软件或硬件。该计算机流入流出的所有网络通信和数据包均要经过此防火墙。在网络中,所谓“防火墙”,是指一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通讯时执行的一种访问控制尺度,它能允许你“同意”的人和数据进入你的网络,

随便推点

Docker部署FastAPI(详细)_发现美的眼睛的博客-程序员秘密_docker部署fastapi

Docker部署FastAPIFastAPI是什么?官网链接(中文)FastAPI是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。对比Tornado呢?相当于Golang(Go)语言中,Beego与Gin两个库的区别。如果是快速构建应用的话,那么Tornado是非常推荐的。因为Tornado采用Epoll模型,性能上压根不用操心,再者用其开发web应用也有着非常便捷的优势。而FastAPI和名字一样,偏重点在A

Java入门学习(五)——IDEA开发工具的使用_y乐悠的博客-程序员秘密_idea java 开发工具

IDEA第一个程序使用步骤,IDEA中设置主题,字体,背景设置,IDEA常用快捷键

android - FlutterActivity MethodChannel和FlutterView_m0_70082703的博客-程序员秘密

import io.flutter.embedding.engine.FlutterEngineimport io.flutter.plugin.common.MethodChannelimport io.flutter.plugins.GeneratedPluginRegistrantimport io.flutter.view.FlutterMainclass MainActivity : FlutterActivity() {override fun configureFlutterEngi

jQuery常用API_闲人散客的博客-程序员秘密_jq常用api

1.jQuery 选择器$('选择器') //获取事件$('选择器') .css('属性', '属性值');如: $('div').css('background', 'pink');为什么使用,css属性就可以更改获取的事件的属性值: 把匹配的所有元素在内部进行遍历循环,给每一个元素添加css这个方法,这种行为称为隐式迭代。$('ul li:first')// 获取ul...

postman接口测试_weixin_42513612的博客-程序员秘密_postman抓取https

一、postman功能区展示postman侧边栏、主功能区、顶部导入、runner、环境变量设置在接口测试工程中将相关项目的接口或者相同域名的接口放在同一文件夹下方便查找在侧边栏中如果没有保存的接口,也可以在历史记录中查找二、postman添加接口请求1、postman可以抓取http和https接口HTTP是明文传输数据,直接请求就可以了HTTPS是ssl加密传输数据所以在请求过程中需要验证;如果https是单项传输数据,直接请求就可以了如果是双向验证数据就需要..

Postman接口测试工具实战演练集_萌笑天的博客-程序员秘密_postman练习

主要进行工具下载安装以及工具日常测试使用的内容进行讲解,并收录整合成一个合集

推荐文章

热门文章

相关标签