本文目录一览:
- 微信支付 notify.php 更新订单代码怎么写
- 如何利用PHP实现 APP端微信支付功能
- 如何用PHP实现微信支付,求教。新手!说明详细点
- 微信公众号支付报跨域错误,后台是php
- 微信支付接口开发用php如何实现?
- 你好 !! PHP如何实现微信支付 求指教 新手!说清楚一点
微信支付 notify.php 更新订单代码怎么写
微信支付PHP开发:微信支付代码及获取支付成功;微信支付demo代码;
include_once("include/WxPayHelper.php"); //该文件 微信DEMO包中有,没有请到官网上下载
$commonUtil = new CommonUtil();
$wxPayHelper = new WxPayHelper();
$user_ip = $_SERVER["REMOTE_ADDR"];
$wxPayHelper->setParameter("bank_type", "WX");
$wxPayHelper->setParameter("body", "微信支付测试");
$wxPayHelper->setParameter("partner", "11111111");
$wxPayHelper->setParameter("out_trade_no", $commonUtil->create_noncestr());
$wxPayHelper->setParameter("total_fee", "1");
$wxPayHelper->setParameter("fee_type", "1");
$wxPayHelper->setParameter("notify_url", "");
$wxPayHelper->setParameter("spbill_create_ip", $user_ip);
$wxPayHelper->setParameter("input_charset", "UTF-8");
HTML代码示例
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta content="application/xhtml+xml;charset=UTF-8" http-equiv="Content-Type" />
<meta content="no-cache,must-revalidate" http-equiv="Cache-Control" />
<meta content="no-cache" http-equiv="pragma" />
<meta content="0" http-equiv="expires" />
<meta content="telephone=no, address=no" name="format-detection" />
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width, height=device-height" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<title>在线支付测试</title>
</head>
<script language="javascript">
function callpay() {
WeixinJSBridge.invoke('getBrandWCPayRequest', <?php echo $wxPayHelper->create_biz_package(); ?>, function(res) {
if (res.err_msg == "get_brand_wcpay_request:ok") {
document.getElementById("zhifu").style.display = 'none';
document.getElementById("successDiv").style.display = 'block';
}
WeixinJSBridge.log(res.err_msg);
});
}
</script>
<body>
<div id="zhifu">
<button type="button" onClick="callpay()">立即在线支付</button><br><br>
</div>
<div id="successDiv" style="display:none">
<h1>支付成功</h1>
</div>
</body>
</html>
获取微信支付成功订单信息的方法
- 支付成功通知的内容可以使用
$_GET
获取订单信息 - 用
$GLOBALS["HTTP_RAW_POST_DATA"]
代码获取
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$OpenId = $postObj->OpenId;
只有“notify_url”页面没有输出“success”,微信后台会自动按时间进行补单。重新发送支付成功的商品订单信息。 补单机制的间隔时间为:8s、10s、10s、30s、30s、60s、120s、360s、1000s。
调试代码示例
$order = $_GET;
$fp = fopen('api.txt', 'a+');
fwrite($fp, "\n _______GET________");
fwrite($fp, var_export($order, true));
fwrite($fp, "\n ________postObj________");
fwrite($fp, var_export($postObj, true));
fwrite($fp, '【 Now 】: ' . date("Y-m-d H:i:s") . "\n");
fclose($fp);
如何利用PHP实现 APP端微信支付功能
PHP后台生成预支付交易单,返回正确的预支付交易回话标识后再在APP里面调起支付
传输给微信的参数要组装成XML格式发送
public function ToXml($data = array()) {
if (!is_array($data) || count($data) == 0) {
return '数组异常';
}
$xml = "";
foreach ($data as $key => $val) {
if (is_numeric($val)) {
$xml .= "<$key>$val</$key>";
} else {
$xml .= "<$key>$val</$key>";
}
}
$xml .= "";
return $xml;
}
生成随机字符串
function rand_code() {
$str = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; //62个字符
$str = str_shuffle($str);
$str = substr($str, 0, 32);
return $str;
}
生成签名
private function getSign($params) {
ksort($params);
foreach ($params as $key => $item) {
if (!empty($item)) {
$newArr[] = $key . '=' . $item;
}
}
$stringA = implode("&", $newArr);
$stringSignTemp = $stringA . "&key=************************";
$stringSignTemp = MD5($stringSignTemp);
$sign = strtoupper($stringSignTemp);
return $sign;
}
生成预支付订单
public function wx_pay() {
$nonce_str = $this->rand_code();
$data['appid'] = 'wxdbc5dc*******';
$data['mch_id'] = '1493*****';
$data['body'] = "APP支付测试";
$data['spbill_create_ip'] = $_SERVER['HTTP_HOST'];
$data['total_fee'] = 1;
$data['out_trade_no'] = time() . mt_rand(10000, 99999);
$data['nonce_str'] = $nonce_str;
$data['notify_url'] = '';
$data['trade_type'] = 'APP';
$data['sign'] = $this->getSign($data);
$xml = $this->ToXml($data);
$url = "";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
if (stripos($url, "https://") !== FALSE) {
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
} else {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
}
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$data = curl_exec($ch);
if ($data) {
curl_close($ch);
$re = $this->FromXml($data);
if ($re['return_code'] != 'SUCCESS') {
json("201", '签名失败');
} else {
$arr = array(
'prepayid' => $re['prepay_id'],
'appid' => 'wxdbc5dc*****',
'partnerid' => '14937****',
'package' => 'Sign=WXPay',
'noncestr' => $nonce_str,
'timestamp' => time(),
);
$sign = $this->getSign($arr);
$arr['sign'] = $sign;
json('200', '签名成功', $arr);
}
} else {
$error = curl_errno($ch);
curl_close($ch);
json('201', "curl出错,错误码:$error");
}
}
将XML数据转换为数组
public function FromXml($xml) {
if (!$xml) {
echo "xml数据异常!";
}
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $data;
}
APP支付成功后,会调用你填写的回调地址
function wx_notify() {
$xmlData = file_get_contents('php://input');
$data = $this->FromXml($xmlData);
$file = fopen('./log.txt', 'a+');
fwrite($file, var_export($data, true));
$sign = $data['sign'];
unset($data['sign']);
if ($sign == $this->getSign($data)) {
if ($data['result_code'] == 'SUCCESS') {
$arr = array(
'pay_status' => 1,
);
$re = M('order')->where(['order_sn' => $data['out_trade_no']])->save($arr);
if ($re) {
echo '';
exit();
}
} else {
$file = fopen('./log.txt', 'a+');
fwrite($file, "错误信息:" . $data['return_msg'] . date("Y-m-d H:i:s") . "\r\n");
}
} else {
$file = fopen('./log.txt', 'a+');
fwrite($file, "错误信息:签名验证失败" . date("Y-m-d H:i:s") . "\r\n");
}
}
如何用PHP实现微信支付,求教。新手!说明详细点
以PHP语言为例,对微信支付的开发流程进行一下说明:
- 获取订单信息。
- 根据订单信息和支付相关的账号生成sign,并且生成支付参数。
- 将支付参数信息POST到微信服务器,获取返回信息。
- 根据返回信息生成相应的支付代码(微信内部)或是支付二维码(非微信内),完成支付。
微信公众号支付报跨域错误,后台是php
首先明确一个概念,微信接口并不是用ajax访问的。希望你是在后台使用curl的。
在以上前提下,此报错是因为你的后台没有设置响应首部字段导致。以下两种方式均可解决:
方式一:
在后台入口文件同级目录下 .htaccess
文件添加以下语句:
Header always set Access-Control-Allow-Origin "*"
方式二: 在被访问的PHP文件头部增加:
header("Access-Control-Allow-Origin: *");
微信支付接口开发用php如何实现?
你好。关于这个问题:
先进入开发者中心 -> 网页授权获取用户基本信息 -> 修改成你的测试域名。否则会出现 redirect_uri
参数错误。
微信支付接口现在也慢慢的像支付宝一样可以利用API接口来实现第三方网站(如pigcms)或应用进行支付了。
希望我的回答对您有用,望采纳~
你好 !! PHP如何实现微信支付 求指教 新手!说清楚一点
通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测试。
从文档上说的来看,微信每次通知过来的数据,结构比较复杂,是一个多段数据,除了要取出POST数据外,还要取其它的数据。
这里首先涉及到一个关于 php://input
与 $_POST
取值的问题,简单列几点如下:
Content-Type
取值为application/x-www-form-urlencoded
时,PHP会将HTTP请求body相应数据会填入到数组$_POST
,填入到$_POST
数组中的数据是进行urldecode()
解析的结果。php://input
数据,只要Content-Type
不为multipart/form-data
(该条件限制稍后会介绍)。那么php://input
数据与HTTP entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length
指定。- 仅当
Content-Type
为application/x-www-form-urlencoded
且提交方法是POST方法时,$_POST
数据与php://input
数据才是“一致”的(打上引号,表示它们格式不一致,内容一致)的。其它情况,它们都不一致。 php://input
读取不到$_GET
数据。是因为$_GET
数据作为query_path
写在HTTP请求头部(header)的PATH字段,而不是写在HTTP请求的body部分。php://input
碰到了multipart/form-data
,请查阅 RFC1867 对它的描述。multipart/form-data
也表示以POST方法提交表单数据,它还伴随了文件上传,所以会跟application/x-www-form-urlencoded
数据格式不一样。它会以一种更合理的,更高效的数据格式传递给服务端。当Content-Type
为multipart/form-data
的时候,即便HTTP请求body中存在数据,php://input
也为空,PHP此时,不会把数据填入php://input
流。所以,可以确定:php://input
不能用于读取enctype=multipart/form-data
数据。- 当
Content-Type
为application/x-www-form-urlencoded
时,php://input
和$_POST
数据是“一致”的,为其它Content-Type
的时候,php://input
和$_POST
数据是不一致的。因为只有在Content-Type
为application/x-www-form-urlencoded
或者为multipart/form-data
的时候,PHP才会将HTTP请求数据包中的body相应部分数据填入$_POST
全局变量中,其它情况PHP都忽略。而php://input
除了在数据类型为multipart/form-data
之外为空外,其它情况都可能不为空。 以上转述这么多文字的意思,就是说,得用到这两种方式来读取微信传过来的数据。