去年写过一遍博客文章。

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

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

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

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

重点来了,,

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

好像很多第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. BZOJ 1207: [HNOI2004]打鼹鼠【妥妥的n^2爆搜,dp】

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3259  Solved: 1564[Submit][Statu ...

  2. NYoj_20吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...

  3. [高并发]抢红包设计(使用redis)

    假设一个需求,在某个预告活动中准备了10w个红包,100w人在某个时间点去开抢,每人只能抢1次,如何保证性能和准确性,下面我给出我的一个设计方案,抛砖引玉 分析瓶颈 查询用户是否已参与过活动 获取一个 ...

  4. final、finally、finalize

    final是一个修饰词.可以修饰变量.方法.类 final修饰变量时分为两种 )1.修饰成员变量:该成员变量不可以被二次赋值.也就是说成员变量无法改变.且该成员变量要么在定义时初始化,要么在构造器中进 ...

  5. linux CentOS部署【minimal 】

    1.为什么选择CentOS不选择其他版本:http://www.cnblogs.com/TeemoHQ/p/6377260.html 2.准备的资源:VMware[官网下载],CentOS镜像 [阿里 ...

  6. 动态查询:getBy字段名

    http://www.php.cn/php/php-getBy.html 根据字段名动态查询:getBy字段名( ) 该方法很有意思,手册的说得很简略,我们根据源码来好好说道说道~~ 1. 功能:根据 ...

  7. Visual SVN Server启动失败0x8007042a错误

    载. 今天在程序VisualSVNServer界面中启动服务时,报错如下:       VisualSVNServerServer service failed to start:服务已返回特定的服务 ...

  8. DEDECMS系统安全篇之移data目录到Web根目录以外听语音

    http://jingyan.baidu.com/article/ad310e80aeb0971849f49e8e.html 主要三个步骤: 1./include/common.inc.php 2.还 ...

  9. beetl模板引擎使用笔记

    maven项目pom: <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl< ...

  10. tomcat 部署war项目

    前提是 jdk环境已配好 把项目war包放到tomcat的webapps目录下 启动tomcat: 这里我把8080端口修改成了80 IP也修改了 如果没修改直接输入localhost:8080/te ...