去年写过一遍博客文章。

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

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

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

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

重点来了,,

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

好像很多第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. Gym 101673F Keeping On Track

    原题传送门 题意:给定一颗n+1(n≤10000)个结点的树(当然有n条边辣),定义一个结点为critical,当且仅当除去这个点及与其相连的边后,所有不相连的结点对数量最多.现在保证有且仅有一个结点 ...

  2. centos7配置阿里云yum源

    1)下载repo文件 wget http://mirrors.aliyun.com/repo/Centos-7.repo 2)备份并替换系统的repo文件 cp Centos-7.repo /etc/ ...

  3. GDOI2016游记

    翘课真好……(下午返校gg…… 为了GDOI,我特地准备了一堆模板,然后,由于在考前不久发现一个挺好玩的手游……模板就这么被放在一边(只翻了几次…… Day 0 同样是坐动车,到广州后转大巴到四会市, ...

  4. Codeforces 791A Bear and Big Brother(暴力枚举,模拟)

    A. Bear and Big Brother time limit per test:1 second memory limit per test:256 megabytes input:stand ...

  5. POJ 1741 Tree(树的点分治,入门题)

    Tree Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21357   Accepted: 7006 Description ...

  6. CF 615D Multipliers

    题目:http://codeforces.com/contest/615/problem/D 求n的约数乘积. 设d(x)为x的约数个数,x=p1^a1+p2^a2+……+pn^an,f(x)为x的约 ...

  7. 【转自知乎】:localhost、127.0.0.1 和 本机IP 三者的区别?

    作者:知乎用户链接:https://www.zhihu.com/question/23940717/answer/26230963来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  8. UE4 Pure函数的特点

    蓝图里的Pure函数跟正常函数的区别是:Pure函数在它连接到的正常函数执行的时候才执行,正常函数按照连接的顺序执行. Pure函数不会改变游戏中其他的变量,所以getter和其他一些纯计算的函数一般 ...

  9. TP传输的两种模式

      主动模式(active):   我们知道,FTP是由TCP封包的模式连接,TCP 这种封包由于需要经过 Server 端与 Client 端两边的『三次握手』之后,才能确定联机,也就是需要执行AC ...

  10. DedeCMS实现自定义表单提交后发送指定QQ邮箱法

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=dedecms 邮箱&oq=d ...