去年写过一遍博客文章。
网站申请不到支付宝接口、微信接口,免接口收款实现方式。
网络在发展,支付宝也好,微信也好,技术在进步,这种方式已经不能使用了,明显的一个问题是,支付宝的刷新工具,会定时退出,必须人工输入才能再次登录。。
由于客户需要,想到了另外一种方法。
客户用正规的公司申请支付宝接口,微信接口,建立一个正规的网上商城类网站,这个网站只是一个中间网站,没有实际作用,当然所有功能都是正常的。
重点来了,,
我们可以在申请不到接口的网站,通过跳转到正规网站来完成支付,支付结果,也通过远程的方式反馈给调用支付的网站。
好像很多第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';
}