E企盈营销工具技术服务商 热线:4006-838-530

微信免密支付,微信小程序中实现微信支付

E企盈直播平台营销卖货系统

最近做小程序,涉及到微信支付,看了看微信小程序开发文档,尽管之前做过微信支付,还是有点懵逼,不过好在之前研究过,不然真的是无从下手。对比了一下发现,其实小程序中做支付比公众号支付要省事很多,因为不需要支付授权目录,也不需要授权域名,但是支付流程却比公众号多了一步,就是统一下单是预支付,然后需要对预支付的结果再次签名之后,才调起支付。前期准备:1.开通了微信支付,并且小程序绑定了微信支付;2.准备好小程序的appid,微信支付的商户号,支付秘钥。商户系统和微信支付系统主要交互:1、小程序内调用登录接口,获取到用户的openid此步骤在小程序内完成,也很简单,方法见:【】2、调用商户服务器支付统一下单接口,进行预支付/预支付请求接口(POST)@paramstring$openidopenid@paramstring$body商品简单描述@paramstring$order_sn订单编号@paramstring$total_fee金额@returnjson的数据/publicfunctionprepay(){$config=$this-config;$openid=I(‘post.openid’);$body=I(‘post.body’);$order_sn=I(‘post.order_sn’);$total_fee=I(‘post.total_fee’);//统一下单参数构造$unifiedorder=array(‘appid’=$config[‘appid’],’mch_id’=$config[‘pay_mchid’],’nonce_str’=self::getNonceStr(),’body’=$body,’out_trade_no’=$order_sn,’total_fee’=$total_fee100,’spbill_create_ip’=get_client_ip(),’notify_url’=’https://’.$_SERVER[‘HTTP_HOST’].’/Api/Wxpay/notify’,’trade_type’=’JSAPI’,’openid’=$openid);$unifiedorder[‘sign’]=self::makeSign($unifiedorder);//请求数据$xmldata=self::array2xml($unifiedorder);$url=’https://api.mch.weixin.qq.com/pay/unifiedorder’;$res=self::curl_post_ssl($url,$xmldata);if(!$res){self::return_err(“Can’tconnecttheserver”);}//这句file_put_contents是用来查看服务器返回的结果测试完可以删除了//file_put_contents(APP_ROOT.’/Statics/log1.txt’,$res,FILE_APPEND);$content=self::xml2array($res);if(strval($content[‘result_code’])==’FAIL’){self::return_err(strval($content[‘err_code_des’]));}if(strval($content[‘return_code’])==’FAIL’){self::return_err(strval($content[‘return_msg’]));}self::return_data(array(‘data’=$content));//$this-ajaxReturn($content);}3、调用商户服务器再次签名接口,返回支付数据/进行支付接口(POST)@paramstring$prepay_id预支付ID(调用prepay()方法之后的返回数据中获取)@returnjson的数据/publicfunctionpay(){$config=$this-config;$prepay_id=I(‘post.prepay_id’);$data=array(‘appId’=$config[‘appid’],’timeStamp’=time(),’nonceStr’=self::getNonceStr(),’package’=’prepay_id=’.$prepay_id,’signType’=’MD5′);$data[‘paySign’]=self::makeSign($data);$this-ajaxReturn($data);}4、小程序内完成支付,商户服务器接收支付回调通知小程序端代码:wx.requestPayment({‘timeStamp’:”,’nonceStr’:”,’package’:”,’signType’:’MD5′,’paySign’:”,’success’:function(res){},’fail’:function(res){}})服务器回调通知://微信支付回调验证publicfunctionnotify(){$xml=$GLOBALS[‘HTTP_RAW_POST_DATA’];//这句file_put_contents是用来查看服务器返回的XML数据测试完可以删除了//file_put_contents(APP_ROOT.’/Statics/log2.txt’,$res,FILE_APPEND);//将服务器返回的XML数据转化为数组$data=self::xml2array($xml);//保存微信服务器返回的签名sign$data_sign=$data[‘sign’];//sign不参与签名算法unset($data[‘sign’]);$sign=self::makeSign($data);//判断签名是否正确判断支付状态if(($sign===$data_sign)&&($data[‘return_code’]==’SUCCESS’)&&($data[‘result_code’]==’SUCCESS’)){$result=$data;//获取服务器返回的数据$order_sn=$data[‘out_trade_no’];//订单单号$openid=$data[‘openid’];//付款人openID$total_fee=$data[‘total_fee’];//付款金额$transaction_id=$data[‘transaction_id’];//微信支付流水号//更新数据库$this-updateDB($order_sn,$openid,$total_fee,$transaction_id);}else{$result=false;}//返回状态给微信服务器if($result){$str=’xmlreturn_code![CDATA[SUCCESS]]/return_codereturn_msg![CDATA[OK]]/return_msg/xml’;}else{$str=’xmlreturn_code![CDATA[FAIL]]/return_codereturn_msg![CDATA[签名失败]]/return_msg/xml’;}echo$str;return$result;}我将完整的接口代码封装成了一个类文件,可以直接引入项目更改一下配置参数就可以使用的,源码下载:小程序端完整代码如下:/支付函数@param{[type]}_payInfo[description]@return{[type]}[description]/pay:function(_payInfo,success,fail){varpayInfo={body:”,total_fee:0,order_sn:”}Object.assign(payInfo,_payInfo);if(payInfo.body.length==0){wx.showToast({title:’支付信息描述错误’})returnfalse;}if(payInfo.total_fee==0){wx.showToast({title:’支付金额不能0′})returnfalse;}if(payInfo.order_sn.length==0){wx.showToast({title:’订单号不能为空’})returnfalse;}varThis=this;This.getOpenid(function(openid){payInfo.openid=openid;This.request({url:’api/pay/prepay’,data:payInfo,success:function(res){vardata=res.data;console.log(data);if(!data.status){wx.showToast({title:data[‘errmsg’]})returnfalse;}This.request({url:’api/pay/pay’,data:{prepay_id:data.data.data.prepay_id},success:function(_payResult){varpayResult=_payResult.data;console.log(payResult);wx.requestPayment({‘timeStamp’:payResult.timeStamp.toString(),’nonceStr’:payResult.nonceStr,’package’:payResult.package,’signType’:payResult.signType,’paySign’:payResult.paySign,’success’:function(succ){success&&success(succ);},’fail’:function(err){fail&&fail(err);},’complete’:function(comp){}})}})}})})}

赞(0) 打赏
未经允许不得转载:E企盈小程序开发-热线:4006-838-530 » 微信免密支付,微信小程序中实现微信支付
分享到: 更多 (0)
E企盈小程序直播营销卖货系统
E企盈直播平台营销卖货系统

评论 抢沙发

E企盈小程序开发

联系我们联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏