<?php
class JsAction extends CommonAction {
public function index(){
load ( "@.jssdk" );
$jssdk = new JSSDK("yourAppID", "yourAppSecret");
$signPackage = $jssdk->GetSignPackage();
$this->assign('js',$signPackage );
$this->display();
}
public function getPackage(){
/**统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返回预支付订单号的接口,目前微信支付所有场景均使用这一接口
统一支付中以下参数从配置中获取,或由类自动生成,不需要用户填写
微信支付统一下单接口文档:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=9_1*/
$rand = md5(time() . mt_rand(0,1000));
$param["appid"] = "yourAppSecret";
$param["openid"] = $_SESSION["userInfo"]["wxID"];
$param["mch_id"] = "商户ID";
$param["nonce_str"] = $rand;
$param["body"] = "测试支付";
$param["out_trade_no"] = $_SESSION["userInfo"]["userID"].time();
$param["total_fee"] = 1;
$param["spbill_create_ip"] = $_SERVER["REMOTE_ADDR"];
$param["notify_url"] = "http://www.xxx.com/xxx.php/Js/callback";
$param["trade_type"] = "JSAPI";
//签名算法:http://pay.weixin.qq.com/wiki/doc/api/index.php?chapter=4_3
$signStr = 'appid='.$param["appid"]."&body=".$param["body"]."&mch_id=".$param["mch_id"]."&nonce_str=".$param["nonce_str"]."¬ify_url=".$param["notify_url"]."&openid=".$param["openid"]."&out_trade_no=".$param["out_trade_no"]."&spbill_create_ip=".$param["spbill_create_ip"]."&total_fee=".$param["total_fee"]."&trade_type=".$param["trade_type"];
$signStr = $signStr."&key=youAPIkey";
$param["sign"] = strtoupper(MD5($signStr));
$data = '<xml>
<appid><![CDATA['.$param["appid"].']]></appid>
<openid><![CDATA['.$param["openid"].']]></openid>
<mch_id>'.$param["mch_id"].'</mch_id>
<nonce_str><![CDATA['.$param["nonce_str"].']]></nonce_str>
<body><![CDATA['.$param["body"].']]></body>
<out_trade_no><![CDATA['.$param["out_trade_no"].']]></out_trade_no>
<total_fee>'.$param["total_fee"].'</total_fee>
<spbill_create_ip><![CDATA['.$param["spbill_create_ip"].']]></spbill_create_ip>
<notify_url><![CDATA['.$param["notify_url"].']]></notify_url>
<trade_type><![CDATA['.$param["trade_type"].']]></trade_type>
<sign><![CDATA['.$param["sign"].']]></sign>
</xml>';
$postResult = myCurl("https://api.mch.weixin.qq.com/pay/unifiedorder",$data);
$postObj = simplexml_load_string($postResult, 'SimpleXMLElement', LIBXML_NOCDATA);
$msg = "".$postObj->return_msg;
if($msg == "OK"){
$result["timestamp"] = time();
$result["nonceStr"] = "".$postObj->nonce_str; //不加""拿到的是一个json对象
$result["package"] = "prepay_id=".$postObj->prepay_id;
$result["signType"] = "MD5";
/**支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
备注:prepay_id 通过微信支付统一下单接口拿到,paySign 采用统一的微信支付 Sign 签名生成方法,注意这里 appId 也要参与签名,
appId 与 config 中传入的 appId 一致,即最后参与签名的参数有appId, timeStamp, nonceStr, package, signType。*/
$paySignStr = 'appId=wxd7c487b7a2d9bc65'.'&nonceStr='.$result["nonceStr"].'&package='.$result["package"].'&signType='.$result["signType"].'&timeStamp='.$result["timestamp"];
$paySignStr = $paySignStr."&key=youAPIkey";
$result["paySign"] = strtoupper(MD5($paySignStr));
$this->ajaxReturn($result, "".$msg, 1);
}else{
$this->ajaxReturn("", "".$msg, 0);
}
}
public function callback(){
}
}