重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PAY页面往 js_api_call.php 传值 获取不到的问题
专业领域包括成都网站建设、成都网站制作、商城网站建设、微信营销、系统平台开发, 与其他网站设计及系统开发公司不同,创新互联的整合解决方案结合了帮做网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,为客户提供全网互联网整合方案。
echo 是可以echo出来的 但是
这里不写死就会报错 $key0$
?php
/**
* JS_API支付demo
* ====================================================
* 在微信浏览器里面打开H5网页中执行JS调起支付。接口输入输出数据格式为JSON。
* 成功调起支付需要三个步骤:
* 步骤1:网页授权获取用户openid
* 步骤2:使用统一支付接口,获取prepay_id
* 步骤3:使用jsapi调起支付
*/
//获取信息
@$name="支付测试-包包";
@$price=0.01*100;
@$hyid=$_GET['hyid'];
@$out_trade_no=$_GET['num'];//订单号
include_once("../WxPayPubHelper/WxPayPubHelper.php");
//使用jsapi接口
$jsApi = new JsApi_pub();
//=========步骤1:网页授权获取用户openid============
//通过code获得openid
if (!isset($_GET['code']))
{
//触发微信返回code码
$url = $jsApi-createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location: $url");
}else
{
//获取code码,以获取openid
$code = $_GET['code'];
$jsApi-setCode($code);
$openid = $jsApi-getOpenId();
}
//=========步骤2:使用统一支付接口,获取prepay_id============
//使用统一支付接口
$unifiedOrder = new UnifiedOrder_pub();
//设置统一支付接口参数
//设置必填参数
//appid已填,商户无需重复填写
//mch_id已填,商户无需重复填写
//noncestr已填,商户无需重复填写
//spbill_create_ip已填,商户无需重复填写
//sign已填,商户无需重复填写
$unifiedOrder-setParameter("openid","$openid");//商品描述
$unifiedOrder-setParameter("body","$name");//商品描述
//自定义订单号,此处仅作举例
$timeStamp = time();
$out_trade_no = WxPayConf_pub::APPID."$timeStamp";
$unifiedOrder-setParameter("out_trade_no","$out_trade_no");//商户订单号
$unifiedOrder-setParameter("total_fee","$price");//总金额
$unifiedOrder-setParameter("notify_url","");//通知地址
$unifiedOrder-setParameter("trade_type","JSAPI");//交易类型
//非必填参数,商户可根据实际情况选填
//$unifiedOrder-setParameter("sub_mch_id","XXXX");//子商户号
//$unifiedOrder-setParameter("device_info","XXXX");//设备号
//$unifiedOrder-setParameter("attach","XXXX");//附加数据
//$unifiedOrder-setParameter("time_start","XXXX");//交易起始时间
//$unifiedOrder-setParameter("time_expire","XXXX");//交易结束时间
//$unifiedOrder-setParameter("goods_tag","XXXX");//商品标记
$unifiedOrder-setParameter("attach","2");//会员ID
$prepay_id = $unifiedOrder-getPrepayId();
//=========步骤3:使用jsapi调起支付============
$jsApi-setPrepayId($prepay_id);
$jsApiParameters = $jsApi-getParameters();
//echo $jsApiParameters;
?
html
head
meta charset="utf-8"
title支付页面/title
script type="text/javascript"
//调用微信JS api 支付
function jsApiCall()
{
WeixinJSBridge.invoke(
'getBrandWCPayRequest',
?php echo $jsApiParameters; ?,
function(res){
WeixinJSBridge.log(res.err_msg);
if(res.err_msg == "get_brand_wcpay_requestk"){
window.location.href='/shop/successful.php?spmc=?php echo $name; ?price=?php echo $price; ?';
//history.go(-1);
}else{
window.location.href='/shop/pay.php';
}
}
);
}
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', jsApiCall);
document.attachEvent('onWeixinJSBridgeReady', jsApiCall);
}
}else{
jsApiCall();
}
/script
/head
/html
1、看接口能不能正常访问,返回值小程序是否能接到
2,如果都能,看看传值方式post或者get
这种情况发生在以UTF-8编码格式传输数据的时候,这开头的三个字节叫做BOM(Byte Order Mark,字节顺序标记),小程序接收到php端返回的数据后,把开头的三个字节去掉即可。
更彻底的解决办法是把php文件保存为 不带BOM的UTF-8 文件,这样返回的数据就不带BOM了
上传文件是不能包含中文名的,可以生成新的文件名再上传。
如果想保留原文件名,可以写入数据库,然后输出时做一个专门的脚本,用于读取原文件名并输出。
我以MYSQL举例(输出脚本):
?php
$file = $_GET['downurl'];
$con = mysql_connect("数据库主机名","帐号","密码");
if(!$con)
exit(mysql_errno().":".mysql_error());
$sql = "SELECT * FROM fname WHERE fileurl='$file'";
$result = mysql_query($sql,$con);
$row = mysql_fetch_array($result);
header("Content-Disposition: attachment; filename='".$row['filename']."'")
echo file_get_contents($file);
?
有了这个脚本,那么还需要在MYSQL建立一个表fname。
执行以下SQL:
CREATE TABLE 'fname'
(
fileurl varchar(255),
filename varchar(255)
)
最后你在上传文件成功时加一个写入数据的操作:
?php
$con = mysql_connect("数据库主机名","帐号","密码");
if(!$con)
exit(mysql_errno().":".mysql_error());
$sql = "INSERT INTO fname(fileurl,filename) VALUES('文件URL','原文件名')";
?
文件URL我就不说了,你一定会弄。原文件名,可以通过$_FILES获取,具体如何获取,我就不写了,百度一下,W3SCHOOL,PHP手册都有。