微信H5支付浏览器支付
//微信支付
Route::get('wechat', 'ZhifuController@wechat');
//微信支付成功完成后回调地址
Route::post('wenotify','ZhifuController@wenotify');
//微信支付成功后跳转页面
Route::get('wechat_ok', 'ZhifuController@wechat_ok');
==================================================
$.ajax({
type:'get',
dataType:'html',
//async : true,
data: {
'zhifujiage': $('#zhifujiage').val(),
'erweima' : $('#erweima').val(),
'zhifufangshi': 'wechat'
},
url:'{{url('wechat')}}',
success:function(data) {
//alert(data);
window.location.href = data;
}
});
=====================================================
public function wechat()
{
//微信支付
$outTradeNum = 'wechat'.time();
$payAmount = request::input('zhifujiage');
$subject = '商品内容';
$appid = "wx72703c3036123456"; //应用 APPID
$mch_id = "1549212345"; //微信支付商户号
$out_trade_no = $outTradeNum; //平台内部订单号
$nonce_str = $this->createNoncestr(); //随机字符串
$body = $subject; //内容
$total_fee = $payAmount * 100; //金额,转化成分单位
$spbill_create_ip = $this->Ip(); //IP
$notify_url = "http://www.xxxxx.com/wenotify"; //回调地址
$trade_type = 'MWEB';//交易类型 具体看 API 里面有详细介绍
$scene_info ='{"h5_info":{"type":"Wap","wap_url":"http://www.xxxxx.com","wap_name":"创咖寄卖"}}';//场景信息 必要参数
//拼接字符串 注意顺序微信有个测试网址 顺序按照他的来 直接点下面的校正测试 包括下面 XML 是否正确
$signA ="appid=$appid&attach=$out_trade_no&body=$body&mch_id=$mch_id&nonce_str=$nonce_str¬ify_url=$notify_url&out_trade_no=$out_trade_no&scene_info=$scene_info&spbill_create_ip=$spbill_create_ip&total_fee=$total_fee&trade_type=$trade_type";
//微信商户 API 密钥, 申请支付后有给予一个商户账号和密码,登陆后自己设置key
$key = "wwwxxxxxjimaicom000000000000000";
$strSignTmp = $signA . "&key = $key";
// MD5 后转换成大写
$sign = strtoupper(MD5($strSignTmp));
//拼接成 XML 格式
$post_data = "<xml>
<appid>$appid</appid>
<mch_id>$mch_id</mch_id>
<body>$body</body>
<out_trade_no>$out_trade_no</out_trade_no>
<total_fee>$total_fee</total_fee>
<spbill_create_ip>$spbill_create_ip</spbill_create_ip>
<notify_url>$notify_url</notify_url>
<trade_type>$trade_type</trade_type>
<scene_info>$scene_info</scene_info>
<attach>$out_trade_no</attach>
<nonce_str>$nonce_str</nonce_str>
<sign>$sign</sign>
</xml>";
//微信传参地址
$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
//后台 POST 微信传参地址 同时取得微信返回的参数
$dataxml = $this->postXmlCurl($post_data, $url);
//将微信返回的 XML 转换成数组
$objectxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA);
// 可以在 MWEB_URL 后拼接上 redirect_url 参数,来指定回调页面
$returnUrl = "http://www.xxxxx.com/wechat_ok";
$return_Url = urlencode($returnUrl);
return $objectxml['mweb_url'] . '&redirect_url=' . $return_Url;
}
=====================================================
public function wenotify()
{
//微信支付回调页面,静默执行
//回调地址接收的数据
//{"appid":"wx72703c3036a8197b","bank_type":"CFT","cash_fee":"1","fee_type":"CNY","is_subscribe":"Y","mch_id":"1549232891","nonce_str":"vhJeE1k7lxz5Ankz","openid":"ouzAowGMNiks9R62cw5NZas9BvlQ","out_trade_no":"wechat1566399864","result_code":"SUCCESS","return_code":"SUCCESS","sign":"E5E1040F24C88E48130F5275BD19EA7C","time_end":"20190821230428","total_fee":"1","trade_type":"MWEB","transaction_id":"4200000374201908217238359011"}
//获得返回的XML数据
$xml = file_get_contents("php://input");
//将服务器返回的XML数据转化为数组,引用格式 $data['appid'];
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
// 保存微信服务器返回的签名sign
$data_sign = $data['sign'];
// sign不参与签名算法
unset($data['sign']);
$sign = $this->signs($data);
$result='';
// 判断签名是否正确 判断支付状态
if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') )
{
//$data为获取服务器返回的数据
$result = $data;
//这里进行业务逻辑处理。。。。。。
}else{
$str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>';
}
// 返回状态给微信服务器
if ($result) {
$str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}else{
$str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>';
}
return $str;
}
==============================================================
public function wechat_ok()
{
//跳转后的处理。。。。
}
==============================================================
public function Ip()
{
//获得ip
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[\d\.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}
-----------------------------------------------------
public function createNoncestr( $length = 32 )
{
//随机32位长度的字符串
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
$str ="";
for ( $i = 0; $i < $length; $i++ ) {
$str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return $str;
}
----------------------------------------------------------
function postXmlCurl($xml, $url, $second = 30){
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
//设置 header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//post 提交方式
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行 curl
$data = curl_exec($ch);
//返回结果
if($data){
curl_close($ch);
return $data;
}else{
$error = curl_errno($ch);
curl_close($ch);
echo "curl 出错,错误码:$error"."<br>";
}
}
-----------------------------------------
private function signs($data)
{
//签名算法
$stringA = '';
foreach ($data as $key=>$value){
if(!$value) continue;
if($stringA) $stringA .= '&'.$key."=".$value;
else $stringA = $key."=".$value;
}
//申请支付后有给予一个商户账号和密码,登陆后自己设置key
$wx_key = 'wwwxxxxxjimaicom1234567891234';
$stringSignTemp = $stringA.'&key='.$wx_key;
return strtoupper(md5($stringSignTemp));
}
-------------------------------------------
转载于:https://my.oschina.net/u/2444569/blog/3097315
微信H5支付浏览器支付相关推荐
- 微信H5调用支付宝支付详细(一)!!!
微信公众号H5页面使用支付包手机网站支付!!! 这两天根据公司的需求写了一个从微信公众号的H5(公众号中的网站)页面跳转支付宝支付,大家应该都知道微信和支付宝这两家 谁也不让这谁.想在微信中用支付宝那 ...
- 微信H5 使用浏览器不能唤起支付宝小程序
记录一下,自己遇到的一些问题: 业务需求: h5放在微信公众号 和 支付宝生活号里面, 在公众号登录H5时,点击付款需要进入 支付宝小程序 遇到的问题 : 1.微信直接无法调起支付宝: 这边可以参 ...
- android微信h5转原生支付,微信原生支付流程以及踩坑
本次记录的是微信"JSAPI"的支付方式 也就是微信内H5页面调起支付,其他支付方式也大同小异,总体的流程和思路大致是一样的,基本配置方面就不详细记录,只需要商户号和商户Key, ...
- php对接微信H5 V3版本支付不使用SDK
参考官方文档 https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_3_1.shtml (h5支付文档) https://pay.weixin. ...
- 微信H5公众号支付问题-(get_brand_wcpay_request:fail)2017年10月
微信支付文档确实做的有很多不足的地方,基于以上情况本人对于微信支付遇到get_brand_wcpay_request:fail做出如下解决方案: function jsApiCall() {Weixi ...
- 微信支付—微信H5支付「微信内部浏览器」
前言 微信支付-微信H5外部浏览器支付 微信支付-微信H5内部浏览器支付「本文」 微信支付-PC端扫码支付「待写」 本篇是微信支付系列的第二篇.微信H5内部浏览器支付,关于微信H5外部浏览器唤起微信A ...
- 微信支付—微信H5支付「非微信内部浏览器-QQ/UC浏览器等」
前言 微信支付-微信H5外部浏览器支付「本文」 微信H5内部浏览器支付「待写」 PC端扫码支付「待写」 一直计划着写一写微信支付相关的文章,希望能加深一下自己的印象,拖了一天又一天- 最近终于空出时间 ...
- 微信支付—微信H5支付「PC端扫码支付」
前言 微信支付-微信H5外部浏览器支付 微信支付-微信H5内部浏览器支付 微信支付-PC端扫码支付「本文」 本篇是微信支付系列的第三篇,PC端扫码支付. 开发环境:Java + SpringBoot ...
- 使用beecloud和easychat 做微信H5 微信公众号支付遇到的坑
首先我先来说明微信h5和微信公众号支付的区别 微信H5指的是微信网页端支付.微信公众号支付指的是微信浏览器内发起微信支付,这种支付都是属于微信公众号支付.俩者本质的区别就是H5不需要微信网页授权,但是 ...
- 【快应用】微信H5 referer支付未拉起微信收银台
现象描述 快应用使用微信H5 referer方式支付, wxpay.pay调用后回调success得到url,但并未拉起微信收银台,无法支付.另外,应用微信h5支付都是通的,在浏览器端是可以直接支付 ...
最新文章
- c语言gather函数,TensorFlow函数:tf.gather_nd
- 和USB设备建立通信的过程
- 据阿里云EMR快速搭建数据平台(二)
- Unity的 UNet组件介绍
- android友盟错误日志,Taro(React-native)集成友盟错误日志分析U-App移动统计
- ensp1.3.00.100用哪个virtualbox_virtualBox使用 Ubuntu18.0.4
- Spring之AOP详解
- mysql事务的好处_什么是事务(transaction)?它有什么好处
- winform布局、控件
- 户如何获得渗透服务---步骤与效果
- spring mvc 返回json的配置
- 计算机应用基础练习题库与答案
- 东芝2303am维护清零_东芝打印机2303A怎样清零?
- python 画图十大工具_python实现画图工具
- win7一激活就蓝屏
- 运行python.exe文件出现AttributeError: module ‘moviepy.audio.fx.all‘ has no attribute ‘audio_fadein‘
- 电脑网络异常故障解决办法
- 笔记本计算机声音小,笔记本麦克风声音小的简单解决办法【图文教程】
- 用css改变图片背景色颜色
- 心若改变,态度就会改变;态度改变,习惯就改变;习惯改变,人生就会改变
热门文章
- 虚拟机VMware下载与安装教程(详细)
- 【高清视频压制教程】使用MeGUI压制视频教程(以PSP视频为例)(转载)
- 优秀工程师必备的三大思维,你拥有哪些?
- 安装docker ce与padman冲突及解决办法
- win10服务器怎么连接显示器不亮,win10开机后显示器不亮如何解决_win10开机后显示器不亮的处理方法...
- 电磁仿真软件CST2020 下载链接及安装破·解教程笔记
- PLC控制系统检查与维护方法
- 【Other】千字文 硬笔 楷书 字帖
- unity3d 取锚点位置_加热炉传输点
- 京东快递 单号查询接口 C# .net