微信H5支付开发全过程(除内置微信以外的浏览器)
前言:网上都是~ 呵呵 自己搞 只要花时间 多问客服总会有的
只说程序不说准备工作 自己ID 或者秘钥都准备好了 写的有点儿乱 可以把所有的方法 放在一个文件中调用
public function wechat ($doorder,$doczmoney,$doczbody) {
// H5 微信支付
$wxUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder"; //下单接口
$appid = ""; //公众账号ID
$mch_id ="";// 商户号
$nonce_str =$this->randStrpay(); //随机字符串
$key ="";
$body = $doczbody; //商品描述
$out_trade_no = $doorder;// 商户订单号
$total_fee = $doczmoney*100;// 我数据库存的是元 转换下 标价金额 f分
$device_info = '';
$spbill_create_ip = $this->getClientp();// 终端IP
$notify_url ="";// 通知地址
$trade_type ="MWEB";// 交易类型
//组合数组 方便字典升序
$paraMap = array('appid'=>$appid,
'mch_id'=>$mch_id,
'nonce_str'=>$nonce_str,
'body'=>$body,
'out_trade_no'=>$out_trade_no,
'total_fee'=>$total_fee,
'spbill_create_ip'=>$spbill_create_ip,
'notify_url'=>$notify_url,
'trade_type'=>$trade_type,
'device_info'=>$device_info
);
// 字典升序 下边有方法 这是摘出来的 自己复制到自己的位置 然后调用 下边几个调用都一样
$singStr = \Ruifi\Service\CommonService::formatParaMap($paraMap);
//获取singvalue值
$sign =$this->autostr($singStr,$key);
// sign 值添加到数组
$mapSing = array_merge($paraMap,array('sign'=>$sign));
//print_r($mapSing);die;
//数组转xml
$arrXml = \Ruifi\Service\CommonService::arrayToXml($mapSing);
//post 发送
$wechatreslut = \Ruifi\Service\CommonService::postXmlCurl($arrXml,$wxUrl);
//接受xml
$xmlToarr = \Ruifi\Service\CommonService::xmlToArray($wechatreslut);
$xmlToarrStr = \Ruifi\Service\CommonService::utf8_to_gbk_arr($xmlToarr);
if ($xmlToarrStr['result_code'] =='SUCCESS'){
$wxMurl = $xmlToarrStr['mweb_url'];
header("Location: $wxMurl");
}
}
//32位随机字符串
function randStrpay($length=32) {
$rand='';
$randstr= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$max = strlen($randstr)-1;
mt_srand((double)microtime()*1000000);
for($i=0;$i<$length;$i++) {
$rand.=$randstr[mt_rand(0,$max)];
}
return $rand;
}
// 签名算法
function autostr($singStr,$key){
$stringSignTemp = $singStr."&key=$key";
$sign = md5($stringSignTemp);
$signValue = strtoupper($sign);
return $signValue;
}
//获取IP
function getClientp(){
$cip ="unknow";
if($_SERVER['REMOTE_ADDR']){
$cip = $_SERVER['REMOTE_ADDR'];
}elseif(getenv("REMOTE_ADDR")){
$cip =getenv("REMOTE_ADDR");
}
return $cip;
}
这些方法是 上边调用的 你自己随意
/* 字典升序*/
function formatParaMap($paraMap)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
$buff .= $k . "=" . $v . "&";
}
$reqPar = '';
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
} /* 数组转xml */
function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key=>$val)
{
if (is_numeric($val))
{
$xml.="<".$key.">".$val."</".$key.">";
}
else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
public function postXmlCurl($xml,$url,$second=30)
{
//初始化curl
$ch = curl_init();
curl_setopt($ch, CURLOP_TIMEOUT, $second);
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//运行curl
$data = curl_exec($ch);
curl_close($ch);
//返回结果
if($data)
{
curl_close($ch);
return $data;
}
else
{
$error = curl_errno($ch);
echo "curl出错,错误码:$error"."<br>";
curl_close($ch);
return false;
}
}
/* xml 转数组 */
public function xmlToArray($xml)
{
//将XML转为array
$array_data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $array_data;
}
微信H5支付开发全过程(除内置微信以外的浏览器)的更多相关文章
- PHP微信H5支付开发
近来公司项目要求用到微信H5开发,因为微信开发文档处处都是坑,我也走了不少弯路,现在就把H5支付的过程记录一下,已备后用!! 首先 先去商户平台申请开通 H5支付!!!! 我们从微信官方下载H5支付d ...
- 微信H5支付开发(maven仓库版)
官方文档:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1 开发之前确认开通了H5支付功能 一.安装微信sdk 二.创建config ...
- java进行微信h5支付开发
最近在做微信支付开发用的框架是 srpingMVC mybatis spring 下面是开发流程图 我们只需要开发红色标记的模块就可以了. 具体参数详情可以查看微信开发者文档. 新手第一次写,写的不好 ...
- 微信H5支付开发步骤总结
* 开发步骤: * 1.在微信公众号平台设置授权目录,即jsapi.php所在的目录 * 2.在微信支付平台下载证书,放到cert目录 * 3.在微信支付平台设置API秘钥,同时在WxPay.Conf ...
- Android通过外部浏览器调用微信H5支付,Android+PHP详解
看了好多关于讲解微信H5支付开发的文章,大多数都是通过微信内部浏览器来调用支付接口(其实就是公众号支付),可能是因为H5支付接口刚开放不久吧. 微信官方体验链接:http://wxpay.wxutil ...
- 微信支付之微信H5支付(坑,ajax不支持重定向跳转)
这里讲的是 微信h5支付, 是微信以外的手机浏览器调用微信h5支付 h5支付: H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起 ...
- 【第二十篇】C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付
微信开发者文档 微信H5支付官方文档 请阅读清楚 最起码把所有参数看一遍 这个地方也可以看看 微信案例 http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微 ...
- 微信支付-微信公众号支付,微信H5支付,微信APP支付,微信扫码支付
在支付前,如果使用第三方MVC框架,则使用重写模式,服务器也需要配置该项 if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$ last; ...
- C#开发微信门户及应用(44)--微信H5页面开发的经验总结
在我们开发微信页面的时候,需要大量用到了各种呈现的效果,一般可以使用Boostrap的效果来设计不同的页面,不过微信团队也提供很多这方面的资源,包括JSSDK的接口,以及Weui的页面样式和相关功能页 ...
随机推荐
- emit传多个参数
https://blog.csdn.net/lxy123456780/article/details/87811113 子组件: this.$emit('closeChange',false,true ...
- Hadoop集群分布搭建
一.准备工作 1.最少三台虚拟机或者实体机(官网上是默认是3台),我这边是3台 s1: 10.211.55.18 s2: 10.211.55.19 s3: 10.211.55.20 2.安装JDK 3 ...
- 靠边的列表如果没有设置margin-left:20px,那么是看不到列表序号的。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Vagrant Docker Composer Yarn 国外资源下载慢或失败的问题
1 问题 有时,我们请求国外资源时,下载巨慢,甚至失败.如: cd vue-devtools/ $ yarn install 进行到 cypress.... 时,可能失败. 2 解决 次日凌晨(7-8 ...
- MongoDB 查看集合是否分片
MongoDB会把分片过的集合保存在config.collection集合中,若需要查看分片键,则需要根据该集合进行查找.官方的其他很多分片快捷命令也都处于config库 三种方式 1.去config ...
- 073_使用 shell 脚本打印如下图形
#!/bin/bash #打印第一组图片#for(())为类 C 语言的语法格式,也可以使用 for i in;do;done 的格式替换#for((i=1;i<=9;i++))循环会执行 9 ...
- 【.Net设计模式系列】工作单元(Unit Of Work)模式 ( 二 )
回顾 在上一篇博客[.Net设计模式系列]仓储(Repository)模式 ( 一 ) 中,通过各位兄台的评论中,可以看出在设计上还有很多的问题,在这里特别感谢 @横竖都溢 @ 浮云飞梦 2位兄台对博 ...
- 新路由3newifi3路由器刷机newifi3breed解锁小白刷机教程路由器刷breed老毛子Padavan固件
路由刷机围观33696次5条评论日期:2018-11-23字体:大中小 此教程只针对新三路由器小白玩家,大神勿喷,非常详细. 先说一下,本人2018年11月22日新入手了个新三路由器,收到货晚上8 ...
- TortoiseGIT提交
Git最新版下载地址:https://gitforwindows.org/ TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoisegit.or ...
- 正则re.complie作用
封装一个原本重复使用的正则表达式 prog = re.compile(pattern) result = prog.match(string)