古人云:“学而不思则罔,思而不学则殆”,有钱还智能APP开发找黎灿:I8O..2853..296O可微,不是说每个程序员都是百分之百懂得所有的源码规则、编写方式等等,是要每天不断地去学习、积累才能慢慢地录入到自己的脑海中,形成自己的一套思维编写逻辑。
先来谈谈《程序员》杂志,我刚接触程序员杂志,是在大二,那时,我刚转系到计算机系,一来认识的人少,二来我校的机算机课程与我所期待的大相径庭,我对程序的那股子热情,可真是万千抑郁无处可泄啊。直到有一天,我经过报刊亭时,看到一份杂志的标题特别吸引眼球------《程序员》。“程序员”?我以后好像是要当这个来着,啊,终于找到组织了。我毫不犹豫的买下了那份杂志。记得那时04年的第10期,封面是一个职业人士摆着一个微笑的POSE,旁边有一只老虎,封面的大标题是J2SE5.0 会战 .NET2.0,里面还有一篇“程序员的田园”的文章印象比较深刻(那个叫于渊的作者,后来出了本《自己动手写操作系统》)。不过说句实话,《程序员》杂志的内容实在不太适合大学生阅读,一来绝大多数的在校生不可能像《程序员》面向的中高级开发者那样有着丰富的开发经验,能理解技术类文章的内容,二来非技术类的文章,大部分对于大学生来说,又太过于缥缈,什么SOA、SAS、SAAS、SAP(女子美容馆?)、ASP(不是那个编程的ASP噢)、敏捷、极限,看了半天,两字,没懂!所以,程序员杂志中,我印象最深刻的,只能是一些关于程序员生存现状的调查或白描之类的文章,毕竟这和自己的未来有些关系。还有很多因为项目沟通不慎而深陷开发泥潭的故事也给我留下了深刻印象。有一个署名“恶魔”的大侠,他的文章总是很有趣。《程序员》杂志的美工还是不错的,每期杂志的设计上,都是挺下功夫的,很有自己的风格。好啦,本人水平、经验实在有限,对程序员只能有这些肤浅的认识。总的说来,《程序员》的确是一本程序员写给程序员看的杂志,他清晰的专业定位,对技术的深度剖析,对企业应用的前沿关注,是许多其它杂志无法企及的,但从另一个角度来说,这也或许正是《程序员》的短板所在。
《程序员》IT、互联网评论类 :
这类杂志很少涉及技术细节,但却以“旁观者清”的姿态出现,许多观点一针见血,或令人恍然大悟、或令人拍案称奇。比较偏向企业应用的,如《软件世界》,基本就不谈什么技术细节,全都是企业啦,外包啦,SOA什么的,不过由于不涉及一些技术细节,很多文章还都是非常通俗易读的。特别值得一提的是该杂志每期的卷首语写的特别的有品,以一种旁观者的姿态出现,或讥或捧,非常耐看。有比较偏向于指导高校学生如何走好职场第一步的,如《IT博客-----软件工程师》,80后的财富新贵们、吴莹莹都曾上过封面。这份杂志除了非常关注IT行业就业和创业的动向外,还有一个非常大的靓点,就是情感类的文章也有不少的份量。要知道,在竞争激烈、技术味道浓郁的IT界,情感往往是被放在次要的住置,可是它往往又是人们最柔软、最需要呵护的地方,于是,这份杂志独树一帜地涉及“IT人的情感世界”,自然就非常的出彩了。聊完自己的身份心得后是时候给大家普及一下知识了。
200行代码学会微信H5支付,附php可用代码
<?php
const APPID =
‘xxxxxxxxxxxxxxxxxx‘
;
const MCHID =
‘xxxxxxxxxxx‘
;
const KEY =
‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx‘
;
const APPSECRET =
‘xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx‘
;
/**
*
* 拼接签名字符串
* @param array $urlObj
* @return 返回已经拼接好的字符串
*/
function
ToUrlParams($urlObj)
{
$buff =
""
;
foreach ($urlObj as $k => $v)
{
if
($k !=
"sign"
){
$buff .= $k .
"="
. $v .
"&"
;
}
}
$buff = trim($buff,
"&"
);
return
$buff;
}
/**
* 统一下单,WxPayUnifiedOrder中out_trade_no、body、total_fee、trade_type必填
* appid、mchid、spbill_create_ip、nonce_str不需要填入
* @param WxPayUnifiedOrder $inputObj
* @param int $timeOut
* @throws WxPayException
* @return 成功时返回,其他抛异常
*/
function
unifiedOrder( $timeOut = 6)
{
$datas = array();
$datas[
‘body‘
] =
‘卖王文晓啦,一分一个‘
;
$datas[
‘out_trade_no‘
] =
‘1234567890123456789012‘
;
//订单号
$datas[
‘total_fee‘
] =
‘1‘
;
$datas[
‘time_start‘
] = date(
"YmdHis"
);
$datas[
‘time_expire‘
] = date(
"YmdHis"
, time() + 600);
$datas[
‘notify_url‘
] =
‘http://p154v65220.iask.in/demo/example/write.php‘
;
$datas[
‘trade_type‘
] =
‘JSAPI‘
;
$datas[
‘openid‘
] =
‘oXhDqwVLStq9FBw_eThzUF5IQ_mM‘
;
$url =
"https://api.mch.weixin.qq.com/pay/unifiedorder"
;
$datas[
‘appid‘
] = APPID;
//公众账号ID
$datas[
‘mch_id‘
] = MCHID;
//商户号
$datas[
‘spbill_create_ip‘
] = $_SERVER[
‘REMOTE_ADDR‘
];
//ip
$datas[
‘nonce_str‘
] = getNonceStr();
//随机字符串
//签名步骤一:按字典序排序参数
ksort($datas);
$string = ToUrlParamss($datas);
//签名步骤二:在string后加入KEY
$string = $string .
"&key="
.KEY;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
$datas[
‘sign‘
] = $result;
//签名
$xml = ToXml($datas);
$response = postXmlCurl($xml, $url,
false
, $timeOut);
$data = FromXml($response);
var_dump($data);
return
$data;
}
/**
* 产生随机字符串,不长于32位
* @param int $length
* @return 产生的随机字符串
*/
function
getNonceStr($length = 32)
{
$chars =
"abcdefghijklmnopqrstuvwxyz0123456789"
;
$str =
""
;
for
( $i = 0; $i < $length; $i++ ) {
$str .= substr($chars, mt_rand(0, strlen($chars)-1), 1);
}
return
$str;
}
/**
* 输出xml字符
**/
function
ToXml($datas)
{
$xml =
"<xml>"
;
foreach ($datas as $key=>$val)
{
if
(is_numeric($val)){
$xml.=
"<"
.$key.
">"
.$val.
"</"
.$key.
">"
;
}
else
{
$xml.=
"<"
.$key.
"><![CDATA["
.$val.
"]]></"
.$key.
">"
;
}
}
$xml.=
"</xml>"
;
return
$xml;
}
/**
* 格式化参数格式化成url参数
*/
function
ToUrlParamss($datas)
{
$buff =
""
;
foreach ($datas as $k => $v)
{
if
($k !=
"sign"
&& $v !=
""
&& !is_array($v)){
$buff .= $k .
"="
. $v .
"&"
;
}
}
$buff = trim($buff,
"&"
);
return
$buff;
}
/**
* 以post方式提交xml到对应的接口url
*
* @param string $xml 需要post的xml数据
* @param string $url url
* @param bool $useCert 是否需要证书,默认不需要
* @param int $second url执行超时时间,默认30s
*/
function
postXmlCurl($xml, $url, $useCert =
false
, $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);
//返回结果
curl_close($ch);
return
$data;
}
/**
* 将xml转为array
* @param string $xml
*/
function
FromXml($xml)
{
if
(!$xml){
echo
"xml数据异常!"
;
}
//将XML转为array
//禁止引用外部xml实体
libxml_disable_entity_loader(
true
);
$data = json_decode(json_encode(simplexml_load_string($xml,
‘SimpleXMLElement‘
, LIBXML_NOCDATA)),
true
);
return
$data;
}
/**
* 获取jsapi支付的参数
* @param array $UnifiedOrderResult 统一支付接口返回的数据
* @return json数据,可直接填入js函数作为参数
*/
function
GetJsApiParameters(){
$UnifiedOrderResult = unifiedOrder();
if
(!array_key_exists(
"appid"
, $UnifiedOrderResult)
|| !array_key_exists(
"prepay_id"
, $UnifiedOrderResult)
|| $UnifiedOrderResult[
‘prepay_id‘
] ==
""
)
{
echo $UnifiedOrderResult[
‘err_code_des‘
];
exit;
}
$da = array();
$da[
‘appId‘
] = $UnifiedOrderResult[
"appid"
];
$timeStamp = time();
$da[
‘timeStamp‘
] =
"$timeStamp"
;
$da[
‘nonceStr‘
] = getNonceStr();
$da[
‘package‘
] =
"prepay_id="
. $UnifiedOrderResult[
‘prepay_id‘
];
$da[
‘signType‘
] =
‘MD5‘
;
//签名步骤一:按字典序排序参数
ksort($da);
$string = ToUrlParamss($da);
//签名步骤二:在string后加入KEY
$string = $string .
"&key="
.KEY;
//签名步骤三:MD5加密
$string = md5($string);
//签名步骤四:所有字符转为大写
$result = strtoupper($string);
$da[
‘paySign‘
] = $result;
$parameters = json_encode($da);
return
$parameters;
}
$da = GetJsApiParameters();
var_dump($da);
?>
<html>
<head>
<meta http-equiv=
"content-type"
content=
"text/html;charset=utf-8"
/>
<meta name=
"viewport"
content=
"width=device-width, initial-scale=1"
/>
<title>微信h5支付-王文晓</title>
<script type=
"text/javascript"
>
//调用微信JS api 支付
function
jsApiCall()
{
WeixinJSBridge.invoke(
‘getBrandWCPayRequest‘
,
<?php echo $da; ?>,
function
(res){
WeixinJSBridge.log(res.err_msg);
alert(res.err_code+res.err_desc+res.err_msg);
}
);
}
function
callpay()
{
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>
<body>
<br/>
<font color=
"#9ACD32"
><b>该笔订单支付金额为<span style=
"color:#f00;font-size:50px"
>1分</span>钱</b></font><br/><br/>
<div align=
"center"
>
<button style=
"width:210px; height:50px; border-radius: 15px; border:0px #FE6714 solid; cursor: pointer; color:white; font-size:16px;"
type=
"button"
onclick=
"callpay()"
>立即支付</button>
</div>
</body>
</html>
原文地址:https://www.cnblogs.com/lixin1234/p/11248686.html