去年写过一遍博客文章。

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

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

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

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

重点来了,,

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

好像很多第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. CSS3中first-child、last-child、nth-child、nth-last-child

    1.单独指定第一个子元素.最后一个子元素的样式 <style type="text/css"> li:first-child{ background:yellow; } ...

  2. 【C#学习笔记之一】C#中的关键字

    C#中的关键字 关键字是对编译器具有特殊意义的预定义保留标识符.它们不能在程序中用作标识符,除非它们有一个 @ 前缀.例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字. 下面是列出的 ...

  3. Codeforces 791B Bear and Friendship Condition(DFS,有向图)

    B. Bear and Friendship Condition time limit per test:1 second memory limit per test:256 megabytes in ...

  4. hbmy周赛1--B

    B - 改革春风吹满地 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit  ...

  5. RAID 详解

    一.什么是RAID 磁盘阵列全名是『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列. RAID 可以透过一个技术(软件或 ...

  6. javascript如何处理多级的实时监听

    今日工作中遇到需求,要求js代码对表单中的input内容进行实时监听,当input中的值改变时触发一些事件. 按照常规思维,代码很快写完了. $(function () { $("#inpu ...

  7. 一步一步从原理跟我学邮件收取及发送 4.不同平台下的socket

    既然是面向程序员的文章那当然不能只说说原理,一定要有实际动手的操作.    其实作为我个人的经历来说,对于网络编程,这是最重要的一章! 作为一位混迹业内近20年的快退休的程序员,我学习过很多的开发语言 ...

  8. [最直白版]一步一步教你用VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程

    [最直白版]Win10下一步一步教你用 VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程 安装过程中使用的软件(要保证电脑里面有下列三个东西): 1 ...

  9. linux CentOS部署【minimal 】

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

  10. fsockopen — 打开一个网络连接或者一个Unix套接字连接

    fsockopen (PHP 4, PHP 5, PHP 7) 说明 resource fsockopen ( string $hostname [, int $port = -1 [, int &a ...