这两天和工程师攻克了一个看起来很简单,但花了两周时间的小问题,不多说,总结一下:
————————————测试———————————————————–
————————————支付目录配置———————————————————————–
https://xxx.com/Active/Certificate/
https://xxx.com/Active/Certificate/certificate_detail/id/2
https://xxx.com/Active/Certificate/certificate_detail/id/
————————————————-PHP——————————————————-
public function pay($price,$openid){
$str = “urj28fhjkhkqwcuiasdlklkvbnmzvmnbxcvsjkdafhasjkdhfqwiouyerwqioeufskahdfjkasdhfwqiouerhfjkashfjkdashfuiweyrkjhakjncaskdl”;
$randomstr = substr($str,rand(0,strlen($str)-6),5).substr($str,rand(0,strlen($str)-6),5).substr($str,rand(0,strlen($str)-11),10);
$dingdanhao=date(“YmdHis”.rand(9));
$params[“cusid”] = AppConfig::CUSID;
$params[“appid”] = AppConfig::APPID;
$params[“version”] = AppConfig::APIVERSION;
$params[“trxamt”] =$price*100; //交易金额 //单位为分
$params[“reqsn”] = $dingdanhao;//订单号,自行生成//商户的交易订单号//保证商户平台唯一
$params[“paytype”] = “W02”; //交易方式//W05:微信H5,W06小程序//A05:支付宝H5//暂只支持微信H5
$params[“randomstr”] = $randomstr;//随机字符串//随机生成的字符串
$params[“body”] = “XXXX“; //商品名称//订单标题//订单商品名称,为空则以商户名作为商品名称
$params[“remark”] = “备注信息“; //备注信息
$params[“acct”] = $openid; //关联微信公众号openid,应是用户的openID//支付平台用户标识
//$params[“limit_pay”] = “”; //支付限制//no_credit–指定不能使用信用卡支付
$params[“notify_url”] = C(‘HOST’).“/Tonglian_h5/notify/notify”; //交易结果通知地址//接收异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。
$params[“sign”] = AppUtil::SignArray($params,AppConfig::APPKEY);//签名
$paramsStr = AppUtil::ToUrlParams($params);
$url = AppConfig::APIURL . “/pay”;
$rsp = $this->request($url, $paramsStr);
$rspArray = json_decode($rsp, true);
——————————————–js———————————————————————–
url: ‘/active/certificate/buyCertificate’,
enctype:“multipart/form-data”,
error:function(jqXHR,textStatus,errorThrown){
window.location.href=“/active/member/register”;
var payinfo2= JSON.parse(payinfo);
“appId”:data.appId, //公众号名称,由商户传入
“timeStamp”:data.timeStamp, //时间戳,自1970年以来的秒数
“nonceStr”:data.nonceStr, //随机串
“signType”:data.signType, //微信签名方式:
if(res.err_msg == “get_brand_wcpay_request:ok”){
if (typeof WeixinJSBridge == “undefined”){
if( document.addEventListener ){
document.addEventListener(‘WeixinJSBridgeReady’, jsApiCall, false);
}else if (document.attachEvent){
document.attachEvent(‘WeixinJSBridgeReady’, jsApiCall);