去年写过一遍博客文章。

网站申请不到支付宝接口、微信接口,免接口收款实现方式。

网络在发展,支付宝也好,微信也好,技术在进步,这种方式已经不能使用了,明显的一个问题是,支付宝的刷新工具,会定时退出,必须人工输入才能再次登录。。

由于客户需要,想到了另外一种方法。

客户用正规的公司申请支付宝接口,微信接口,建立一个正规的网上商城类网站,这个网站只是一个中间网站,没有实际作用,当然所有功能都是正常的。

重点来了,,

我们可以在申请不到接口的网站,通过跳转到正规网站来完成支付,支付结果,也通过远程的方式反馈给调用支付的网站。

好像很多第3方集成支付工具,应该也是类似的用法。

上微信支付的代码。

header("Content-Type:text/html;charset=utf-8");
date_default_timezone_set('PRC');
require_once 'config.php';
require_once WX_CLASS;
require_once 'api/'.UGL_CLASS;
require_once 'api/'.SESSION_CLASS;
require_once 'api/libs/WxPay.Api.php';
require_once 'api/libs/WxPay.JsApiPay.php';
error_reporting(0);
$get = $_GET;
$strArr = explode('x',$get['n']);
// http://meng.qiankk.com/demo/getOpenid.php?n=99x1x29191xyzd 贷款网站的支付格式
$type = (int)$strArr[0];
$num = (int)$strArr[1];
$wx=new WX_LC(ID,WX_APPID,WX_SECRET);
$code=$_GET['code'];
if($code==''){
$wx->getCode('snsapi_base');
exit('code empty');
}else{
$data=$wx->getOpenid($code);
if($data->errcode == 40029 || $data->errcode == 40163) {
$wx->getCode();
return;
}
    if($type != 99){
        $s = new S(ID);
        $user = $s->getUser();
        // echo '<pre>';
        // print_r($user);
        // die;
        $user->openid = $data->openid;
        $s->setUser($user);
    }else {
        $user = new stdClass();
        $user->id = mt_rand(1000,99999);
        $user->openid = $data->openid;
    }
}
$feeArr1 = array(
    array('day'=>30,'money'=>48000),
array('day'=>1,'money'=>3300),
array('day'=>30,'money'=>48000),
array('day'=>90,'money'=>99900),
array('day'=>180,'money'=>180000),
array('day'=>365,'money'=>320000)
);
$feeArr2 = array(
    array('day'=>30,'money'=>12000),
array('day'=>1,'money'=>2300),
array('day'=>30,'money'=>15000),
array('day'=>90,'money'=>30000),
array('day'=>180,'money'=>55000),
array('day'=>365,'money'=>98000)
);
if($user && $user->id>0) {
    $uid = $user->id;
} else {
    exit(json_encode(array('result'=>0, 'msg'=>'user error!')));
}
if($type == 99){ //如果是贷款网站      重点在这里,,,,如果是从外站跳转过来的支付,,,,这里重新定义一些支付参数,发起微信支付,,,在回调页面,也做同样的判断就可以了
    $order = (int)$strArr[2];
    $dai = $strArr[3];//来源
    $orderId = $dai.'_'.date('ymdHis').'_'.$order;
 
    $fee = $num * 1;
    $pid = $orderId;
    pay($orderId,$fee,$user,$uid,$order ,$dai);
    die;
}
$orderId = WxPayConfig::MCHID.date("YmdHis").rand(10, 99);
$now = time();
$arr=array(
    'p_id'=>null,
    'p_uid'=>$uid,
    'p_type'=>$type,
    'p_num'=>$num,
    'p_trade_no'=>$orderId,
    'p_transaction_id'=>'',
    'p_buy'=>'',
    'p_create'=>$now,
    'p_update'=>$now,
    'p_more'=>''
);
$pid = $ugl->insert(DB_PREFIX.'pay_log',$arr);
if($pid>0) {
    if($type==1) {
        $fee = $feeArr1[$num]['money'];
    } else {
        $fee = $feeArr2[$num]['money'];
    }
    //$fee = 10000;//($fee/1000)<0.01?0.1:($fee/1000);
    pay($orderId,$fee,$user,$uid,$pid );
}else{
    exit('pid error');
}
function pay($orderId,$fee,$user,$uid = 0,$pid = 0,$dai = ''){
    $ugl = new UGL_v2();
    
    $tools = new JsApiPay();
    $input = new WxPayUnifiedOrder();
    $input->SetBody("12");
    $input->SetAttach("123");
    $input->SetOut_trade_no($orderId);
    $input->SetTotal_fee($fee);
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
    $input->SetGoods_tag("test");
    $input->SetNotify_url(SHAREURL."demo/api/notify_b.php");
    $input->SetTrade_type("JSAPI");
    $input->SetOpenid($user->openid);
    $order = WxPayApi::unifiedOrder($input);
    $jsApiParameters = $tools->GetJsApiParameters($order);
    $str = json_encode($order);
    $ugl->addLog($uid,'201',$str,'下单'.$pid);
    $ec = "var jsApiParameters=$jsApiParameters; var myPid=$pid;";
echo "<script>$ec</script>";
include_once 'callpay_b.html';
}

PHP支付第3方接口使用方法。的更多相关文章

  1. Collection接口和Map接口的 size 方法和 isEmpty方法

    一.Collection接口的 size 方法和 isEmpty方法 int size(); 返回列表中元素的数目,如果这个列表包含超过Integer.MAX_VALUE,则返回Integer.MAX ...

  2. java接口的方法默认都是public abstract类型

    java接口的方法默认都是public abstract类型, 因此我们在编写接口的实现类的时候,方法的实现前面要显式的加上public访问控制符

  3. 关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.

    遇到这个问题说来也怪.新开了一个path的工作空间用来打patch.该Eclipse的默认全局的编译版本是1.6.但是唯独其中的一个插件项目的版本是1.5(可能是唯一的一个,不确定,不知道为什么会是这 ...

  4. 序列化和持久化 merge方法和saveOrUpdate方法

    merge方法和saveOrUpdate方法的区别 merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供的对象变成一个持久化对象:说的通俗一点就是:saveO ...

  5. C#中接口和方法的运用(Fourteenth Day)

    由于周五我有一些事情没来得及总结当天的知识,所以在今天总结一下周五在云和学院所学到的有关接口和方法的知识. 理论: 接口: •接口的定义:interface关键字,接口中可以有属性.方法(未实现) • ...

  6. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  7. Junit 注解 类加载器 .动态代理 jdbc 连接池 DButils 事务 Arraylist Linklist hashset 异常 哈希表的数据结构,存储过程 Map Object String Stringbufere File类 文件过滤器_原理分析 flush方法和close方法 序列号冲突问题

    Junit 注解 3).其它注意事项: 1).@Test运行的方法,不能有形参: 2).@Test运行的方法,不能有返回值: 3).@Test运行的方法,不能是静态方法: 4).在一个类中,可以同时定 ...

  8. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  9. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

随机推荐

  1. Java DB 访问之 mybatis mapper xml 配置方式

    1 项目说明 项目采用 maven 组织 ,jdbc 唯一的依赖就是 mysql-connector-java pom 依赖如下: mysql 数据连接 : mysql-connector-java ...

  2. mysql一些函数的记录

    今天瞎搞还是弄不出报名程序,偶尔记住了几个mysql函数 mysql_connect()连接数据库 mysql_error()输出文本报错 mysql_select_db()函数设置活动的MySQL  ...

  3. windows sevser 2012搭建网站

    1,首先去服务器配置,从哪里下载iis8.0和asp.net和net.xx和web服务,iis控制,ftp等等服务根据自己的需求安装 安装好后把默认的网站删除掉.或者新建一个网站,把服务端口改为其他端 ...

  4. POJ 1739:Tony's Tour

    Description A square township has been divided up into n*m(n rows and m columns) square plots (1< ...

  5. hihoCoder #1015 : KMP算法【KMP裸题,板子】

    #1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  6. [国嵌攻略][106][Linux内存管理子系统]

    内存管理子系统 1.虚拟地址与物理地址的映射 2.物理内存的分配 Linux虚拟地址空间分布 设备最后访问的一定是物理地址,但Linux系统中使用的都是虚拟地址.虚拟地址简单的来说就是程序中使用的地址 ...

  7. 平安E行销扫脸打卡/人寿国寿e店云参会钉钉考勤,原来这么轻易被破解!

    由于近几年人们的保险意识越来越强,身边有很多朋友都在中国人寿,中国平安等保险公司上班薪水高,工作自由,又可以学习很多保险理财的知识,每天早会个2~3个小时,剩下的基本都是自己的时间,(vx:99508 ...

  8. 十二个 ASP.NET Core 例子——IOC

    目录 简单介绍 core自带IOC的实现解释 1.简单介绍 (个人理解) 是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了 怎么用:和IOC容器说你这 ...

  9. Linux apache的运行用户和用户组

    我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...

  10. 数据库复习总结(17)-T-Sql编程

    T-SQL(SQL SERVER) 百度百科:(即 Transact-SQL,是 SQL 在 Microsoft SQL Server 上的增强版,它是用来让应用程序与 SQL Server 沟通的主 ...