[DEMO] 支付宝网页支付及微信网页扫码支付

合集下载

如何在电商平台上选择合适的支付方式

如何在电商平台上选择合适的支付方式

如何在电商平台上选择合适的支付方式如何选择适合的支付方式在电商平台上选择合适的支付方式是进行网上交易时必须考虑的问题之一。

随着电商的兴起和发展,越来越多的人选择在网上购物,而选择适合的支付方式能够确保交易安全、方便快捷。

本文将介绍一些常见的支付方式,并提供一些建议,以帮助消费者在电商平台上选择合适的支付方式。

1. 支付宝(Alipay)支付宝是中国目前最受欢迎的第三方支付平台之一。

它提供了安全可靠的支付服务,并与众多电商平台合作,方便用户进行在线交易。

支付宝支持多种支付方式,包括余额支付、银行卡支付、信用卡支付等。

用户可以根据自己的需求选择合适的支付方式进行付款。

2. 微信支付(WeChat Pay)微信支付是腾讯旗下的支付平台,与微信的普及程度相辅相成,成为了中国电商支付的重要方式之一。

用户只需要绑定银行卡或信用卡,就可以使用微信支付完成购物支付。

此外,微信支付还提供了方便的扫码支付功能,用户只需扫描商家提供的二维码,即可完成支付。

3. 银联在线支付银联在线支付是由中国银联推出的一种支付服务,用户可以使用银联卡在电商平台上完成支付。

这种支付方式广泛接受,安全可靠。

用户只需输入银联卡号、姓名、CVN验证码等信息,就可以完成交易。

4. PayPalPayPal是一家国际知名的支付平台,用户可以通过PayPal账户完成支付。

PayPal支持全球多种货币的交易,适用于跨国交易。

用户可以绑定银行卡或信用卡到PayPal账户,完成支付时只需输入PayPal账户和密码即可。

在选择支付方式时,消费者应该综合考虑以下几个因素:1. 安全性:选择支付方式时,确保支付平台具有安全可靠的支付系统,保护个人信息和资金安全。

2. 方便性:选择支付方式时,考虑是否方便快捷,操作简单。

例如,绑定银行卡或信用卡的支付方式,可以在不离开网页的情况下完成付款。

3. 适应性:选择支付方式时,考虑支付平台是否支持多种货币,以适应不同国家和地区的交易需求。

完全指南:网络支付的使用教程(二)

完全指南:网络支付的使用教程(二)

完全指南:网络支付的使用教程随着科技的飞速发展和人们对便利性的追求,网络支付已经成为了我们日常生活中不可或缺的一部分。

不管是在网上购物,还是在餐厅付账,网络支付都提供了快捷、安全的支付方式。

本文将为您提供一个完全指南,帮助您更好地利用网络支付。

一、网络支付的介绍互联网支付,顾名思义,就是通过互联网进行支付的一种方式。

它可以通过网上银行、支付宝、微信支付等多种平台实现。

相比传统的线下支付方式,网络支付不仅速度更快,还能够实现跨境支付,方便跨国交易。

二、首次使用网络支付的步骤1. 注册账号:在选择合适的支付平台后,您需要注册一个账号。

通常需要提供基本的个人信息和联系方式,以确保您的支付安全。

2. 绑定银行卡或信用卡:为了方便您的资金存取,您需要将自己的银行卡或信用卡与支付平台进行绑定。

这一步通常需要输入您的银行卡或信用卡信息,并进行身份验证。

3. 设置支付密码:为了确保支付安全,支付平台通常要求您设置一个支付密码。

请确保您的支付密码足够复杂,并定期更换以提高账户安全性。

三、常见的网络支付方式1. 网上银行支付:这是最常见的一种网络支付方式,通过银行的网上支付平台实现支付。

您需要登录网上银行,选择转账或支付功能,并输入相应的信息完成支付。

2. 扫码支付:支付宝和微信支付都提供了扫码支付的功能。

商家会生成一个二维码,您只需要打开支付宝或微信扫描二维码,并确认支付金额即可完成支付。

3. 第三方支付平台:除了支付宝和微信支付外,还有一些其他第三方支付平台如财付通、银联在线等,您可以根据自己的需求选择适合自己的平台进行支付。

四、网络支付的优势与注意事项1. 优势:a. 便捷性:网络支付可以随时随地进行,无需携带现金或银行卡。

b. 安全性:网络支付平台通常采用加密算法,确保您的支付信息不被泄露。

c. 快速性:支付完成后,资金可以即时到账,提高了交易效率。

d. 跨境支付:网络支付可以轻松实现跨境交易,方便国际间的商务合作。

php实现支付宝在线支付和扫码支付demo

php实现支付宝在线支付和扫码支付demo

php实现⽀付宝在线⽀付和扫码⽀付demophp实现⽀付宝在线⽀付和扫码⽀付demo背景:在做⼀个公众号时增加了h5端,需要接⼊⽀付,⾮微信环境,选择了⽀付宝,以下简单记录下实现过程,并做了简单的封装,拿来即可使⽤,注意:本项⽬只是基于官⽅demo修改的,需要接⼊⾃⼰项⽬的需要按需获取到。

demo的github地址:⽬录结构:以下的⽂件⽬录⽆需修改,只修改config.php配置⽂件和paytest.php和create_qrcode.php⽂件/aop //核⼼库/img //⼆维码中⼼的icon(⾃⼰引⼊的)/lib //核⼼库/lotusphp_runtime //没⽤到/phpqrcode //⽣成⼆维码的插件(扫码⽀付时⾃⼰引⼊的,没⽤官⽅的)/service //官⽅demo的测试⽂件(没⽤到)AopSdk.php //demo项⽬⼊⼝⽂件,不⽤修改config.php //重要,存放配置⽂件create_qrcode.php //⼆维码扫码⽀付demonotify_url.php //异步回调地址(只测试了⽀付,没⽤到)paytest.php //在线⽀付demoreturn_url.php //同步跳转地址(没⽤到)步骤:1. 申请⽀付宝开发者2. 创建沙箱应⽤,获取到appId3. 获取公钥秘钥等信息,修改config.php4. 修改⽂件实现⽀付功能在线⽀付代码:paytest.php<?php/*** 功能:⽀付宝⽀付测试⽂件* 版本:v1.0* author:wangkk* 以下部分就是具体的⽀付过程,只需要引⼊⾃⼰的配置⽂件$config数组信息,同时需要获取订单信息即可使⽤*///引⼊sdk⽂件require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'aop/AopClient.php';require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'aop/request/AlipayTradeWapPayRequest.php';//引⼊配置⽂件信息require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'config.php';/*** ⽀付宝⽀付类的封装*/class Alipay{//配置⽂件数据public $alipay_config;//构造函数,获取数据public function __construct($alipay_config){//配置项$this->gateway_url = $alipay_config['gatewayUrl'];$this->appid = $alipay_config['app_id'];$this->private_key = $alipay_config['merchant_private_key'];$this->alipay_public_key = $alipay_config['alipay_public_key'];$this->charset = $alipay_config['charset'];$this->signtype = $alipay_config['sign_type'];$this->notify_url = $alipay_config['notify_url'];$this->return_url = $alipay_config['return_url'];if(empty($this->appid) || trim($this->appid) == ""){throw new Exception("appid不能为空!");}if(empty($this->private_key) || trim($this->private_key) == ""){throw new Exception("商户密钥不能为空!");}if(empty($this->alipay_public_key) || trim($this->alipay_public_key) == ""){throw new Exception("商户公钥不能为空!");}if(empty($this->charset) || trim($this->charset)== "" ){throw new Exception("编码格式不能为空");}if(empty($this->gateway_url) || trim($this->gateway_url) == ""){throw new Exception("⽀付⽹关地址不能为空!");}if(empty($this->notify_url) || trim($this->notify_url) == ""){throw new Exception("异步回调地址不能为空!");}}public function pay(){//订单号,⾃定义,唯⼀$out_trade_no = $_GET['out_trade_no'];/** --------------------------------以下部分需要修改:获取订单信息 start--------------------------------- **/ //通过订单号获取到订单信息// $orderInfo = M('order')->where(['out_trade_no'=>$out_trade_no])->find();// if(empty($orderInfo)){// throw new Exception("查⽆此订单");// }// //参数列表// $body = $orderInfo['body']; //商品描述,可为空// $subject = $orderInfo['subject']; //订单标题,必填// $out_trade_no = $orderInfo['out_trade_no']; //订单号,必填// $total_amount = $orderInfo['total_amount']; //订单⾦额,必填/** --------------------------------以上部分需要修改:获取订单信息 end--------------------------------- **/ //订单测试信息,真实项⽬把以下⼏⾏删除,使⽤上边的真实数据$body = '商品描述'; //商品描述,可为空$subject = '订单标题'; //订单标题,必填$out_trade_no = rand(10000,99999); //订单号,必填$total_amount = rand(1,5); //订单⾦额,必填$timeout_express = '1m'; //超时,1分钟$product_code = 'QUICK_WAP_WAY'; //⼿机端⽀付宝if(empty($subject) || trim($subject) == ""){throw new Exception("订单标题不能为空");}if(empty($total_amount) || trim($total_amount) == ""){throw new Exception("订单⾦额不能为空");}//组装订单数据$bizContentarr = array('body' => $body ? $body : '', //商品描述,可以为空'subject' => $subject,'out_trade_no' => $out_trade_no,'total_amount' => $total_amount,'timeout_express' => $timeout_express,'product_code' => $product_code,);$bizContent = json_encode($bizContentarr,JSON_UNESCAPED_UNICODE);//设置数据$aopObj = new \AopClient();$aopObj->gatewayUrl = $this->gateway_url;$aopObj->appId = $this->appid;$aopObj->rsaPrivateKey = $this->private_key;$aopObj->alipayrsaPublicKey = $this->alipay_public_key;$aopObj->apiVersion = '1.0';$aopObj->postCharset = $this->charset;$aopObj->format = 'json';$aopObj->signType = $this->signtype;//设置请求的数据$request = new \AlipayTradeWapPayRequest ();$request->setBizContent($bizContent);$request->setNotifyUrl($this->notify_url);$request->setReturnUrl($this->return_url);$result = $aopObj->pageExecute($request);echo $result;}}//获取到配置⽂件,框架⾥的话直接放在配置⽂件中,通过框架⽅法去获取$configInfo = $config;$AlipayObj = new Alipay($configInfo);$AlipayObj->pay();扫码⽀付代码:create_qrcode.php<?php/*** 功能:⽀付宝⽣成⼆维码* 版本:v1.0* author:wangkk* 以下部分就是具体的⽣成⼆维码过程,只需要引⼊⾃⼰的配置⽂件$config数组信息,同时需要获取订单信息即可使⽤ *///引⼊sdk⽂件require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'aop/AopClient.php';require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'aop/request/AlipayTradePrecreateRequest.php';//引⼊配置⽂件信息require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'config.php';//引⼊⽣成⼆维码的插件require_once dirname ( __FILE__ ).DIRECTORY_SEPARATOR.'phpqrcode/phpqrcode.php';class CreateQrcode{public function __construct($alipay_config){//配置项$this->gateway_url = $alipay_config['gatewayUrl'];$this->appid = $alipay_config['app_id'];$this->private_key = $alipay_config['merchant_private_key'];$this->alipay_public_key = $alipay_config['alipay_public_key'];$this->charset = $alipay_config['charset'];$this->signtype = $alipay_config['sign_type'];$this->notify_url = $alipay_config['notify_url'];$this->return_url = $alipay_config['return_url'];if(empty($this->appid) || trim($this->appid) == ""){throw new Exception("appid不能为空!");}if(empty($this->private_key) || trim($this->private_key) == ""){throw new Exception("商户密钥不能为空!");}if(empty($this->alipay_public_key) || trim($this->alipay_public_key) == ""){throw new Exception("商户公钥不能为空!");}if(empty($this->charset) || trim($this->charset)== "" ){throw new Exception("编码格式不能为空");}if(empty($this->gateway_url) || trim($this->gateway_url) == ""){throw new Exception("⽀付⽹关地址不能为空!");}if(empty($this->notify_url) || trim($this->notify_url) == ""){throw new Exception("异步回调地址不能为空!");}}//⽀付public function pay(){//订单号,⾃定义,唯⼀$out_trade_no = $_GET['out_trade_no'];/** --------------------------------以下部分需要修改:获取订单信息 start--------------------------------- **///通过订单号获取到订单信息// $orderInfo = M('order')->where(['out_trade_no'=>$out_trade_no])->find();// if(empty($orderInfo)){// throw new Exception("查⽆此订单");// }// //参数列表// $body = $orderInfo['body']; //商品描述,可为空// $subject = $orderInfo['subject']; //订单标题,必填// $out_trade_no = $orderInfo['out_trade_no']; //订单号,必填// $total_amount = $orderInfo['total_amount']; //订单⾦额,必填/** --------------------------------以上部分需要修改:获取订单信息 end--------------------------------- **///订单测试信息,真实项⽬把以下⼏⾏删除,使⽤上边的真实数据$body = '商品描述'; //商品描述,可为空$subject = '订单标题'; //订单标题,必填$out_trade_no = rand(10000,99999); //订单号,必填$total_amount = rand(1,5); //订单⾦额,必填$aopObj = new \AopClient ();//设置值$aopObj->gatewayUrl = $this->gateway_url;$aopObj->appId = $this->appid;$aopObj->rsaPrivateKey = $this->private_key;$aopObj->alipayrsaPublicKey = $this->alipay_public_key;$aopObj->apiVersion = '1.0';$aopObj->postCharset = $this->charset;$aopObj->format = 'json';$aopObj->signType = $this->signtype;$request = new AlipayTradePrecreateRequest();//组装订单数据$timeout_express = '5m'; //超时,1分钟$bizContentarr = array('body' => $body ? $body : '', //商品描述,可以为空'subject' => $subject,'out_trade_no' => $out_trade_no,'total_amount' => $total_amount,'timeout_express' => $timeout_express, //过期时间);$bizContent = json_encode($bizContentarr,JSON_UNESCAPED_UNICODE);$request->setBizContent($bizContent);$result = $aopObj->execute($request);$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";$resultCode = $result->$responseNode->code;if(!empty($resultCode) && $resultCode == 10000){//成功,得到⼆维码,在这不使⽤官⽅的⽅法,官⽅使⽤的是google的,墙内不ok$qr_code_url = $result->$responseNode->qr_code;$icon = './img/logo.png';//准备好的logo图⽚\QRcode::png($qr_code_url,false, 'H', 4, false);$code = ob_get_clean();$code = imagecreatefromstring($code);$logo = imagecreatefrompng($icon);$QR_width = imagesx($code);//⼆维码图⽚宽度$QR_height = imagesy($code);//⼆维码图⽚⾼度$logo_width = imagesx($logo);//logo图⽚宽度$logo_height = imagesy($logo);//logo图⽚⾼度$logo_qr_width = $QR_width / 4;$scale = $logo_width/$logo_qr_width;$logo_qr_height = $logo_height/$scale;$from_width = ($QR_width - $logo_qr_width) / 2;//重新组合图⽚并调整⼤⼩imagecopyresampled($code, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);header ( "Content-type: image/png" );ImagePng($code);echo $qrcode;die;} else {echo 'fail';die;}}}$alipay_config = $config;$CreateQrcodeObj = new CreateQrcode($alipay_config);$CreateQrcodeObj->pay();总结终点就是获取公钥秘钥这部分⼀定不能错,还有就是在真实项⽬中的话按需引⼊sdk⽂件,但aop,lotusphp_runtime这两个⽂件夹是⽀付宝核⼼库,必须引⼊,AopSdk.php是⼊⼝⽂件,必须引⼊。

php实现微信和支付宝支付的示例代码

php实现微信和支付宝支付的示例代码

php实现微信和⽀付宝⽀付的⽰例代码php实现微信⽀付在php下实现微信⽀付,这⾥我使⽤了EasyWeChat这⾥我是在Yii框架实现的,安装EasyWeChat插件composer require jianyan74/yii2-easy-wechat⼀:配置EasyWeChat1:在config/main.php 的 component中添加EasyWeChat的SDK'components' => [// ...'wechat' => ['class' => 'jianyan\easywechat\Wechat','userOptions' => [], // ⽤户⾝份类参数'sessionParam' => 'wechatUser', // 微信⽤户信息将存储在会话在这个密钥'returnUrlParam' => '_wechatReturnUrl', // returnUrl 存储在会话中'rebinds' => [ // ⾃定义服务模块// 'cache' => 'common\components\Cache',]],// ...]2:在config/params.php中设置基础配置信息和微信⽀付信息// 微信配置具体可参考EasyWechat'wechatConfig' => [],// 微信⽀付配置具体可参考EasyWechat'wechatPaymentConfig' => [],// 微信⼩程序配置具体可参考EasyWechat'wechatMiniProgramConfig' => [],// 微信开放平台第三⽅平台配置具体可参考EasyWechat'wechatOpenPlatformConfig' => [],// 微信企业微信配置具体可参考EasyWechat'wechatWorkConfig' => [],// 微信企业微信开放平台具体可参考EasyWechat'wechatOpenWorkConfig' => [],// 微信⼩微商户具体可参考EasyWechat'wechatMicroMerchantConfig' => [],⼆:实现微信⽀付1:微信⽀付api$data = ['body' => '',//⽀付描述'out_trade_no' => '',//订单号'total_fee' => '',//⽀付⾦额'notify_url' => '', // ⽀付结果通知⽹址,如果不设置则会使⽤配置⾥的默认地址'trade_type' => 'JSAPI',//⽀付⽅式'openid' => '',//⽤户openid];// ⽣成⽀付配置$payment = Yii::$app->wechat->payment;$result = $payment->order->unify($data);if ($result['return_code'] == 'SUCCESS') {$prepayId = $result['prepay_id'];$config = $payment->jssdk->sdkConfig($prepayId);} else {throw new yii\base\ErrorException('微信⽀付异常, 请稍后再试');}return $this->render('wxpay', ['jssdk' => $payment->jssdk, // $app通过上⾯的获取实例来获取'config' => $config]);2:在wxpay.php⽂件中发起⽀付<script src="/open/js/jweixin-1.4.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript" charset="utf-8">//数组内为jssdk授权可⽤的⽅法,按需添加,详细查看微信jssdk的⽅法wx.config(<?php echo $jssdk->buildConfig(array('chooseWXPay'), true) ?>);function onBridgeReady(){// 发起⽀付wx.chooseWXPay({timestamp: <?= $config['timestamp'] ?>,nonceStr: '<?= $config['nonceStr'] ?>',package: '<?= $config['package'] ?>',signType: '<?= $config['signType'] ?>',paySign: '<?= $config['paySign'] ?>', // ⽀付签名success: function (res) {// ⽀付成功后的回调函数},cancel: function(r) {//⽀付取消后的回调函数},});}if (typeof WeixinJSBridge == "undefined"){if( document.addEventListener ){document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}else if (document.attachEvent){document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}}else{onBridgeReady();}</script>在异步回调地址中获取微信⽀付回调只需要使⽤如下⽅法即可:$payment = Yii::$app->wechat->payment;$response = $payment->handlePaidNotify(function($message, $fail) {//⽀付结果逻辑,只有在函数⾥ return true; 才代表处理完成});$response->send();根据如上步骤就可以实现微信⽀付php实现⽀付宝⽀付⼀:在php中安装⽀付宝插件composer require alipaysdk/easysdk⼆:php实现⽀付宝⽀付1:配置⽀付宝/*** ⽀付宝配置*/public static function getOptions(){$options = new Config();$options->protocol = 'https';$options->gatewayHost = '';$options->signType = 'RSA2';$options->appId = '<-- 请填写您的AppId,例如:2019022663440152 -->';// 为避免私钥随源码泄露,推荐从⽂件中读取私钥字符串⽽不是写⼊源码中$options->merchantPrivateKey = '<-- 请填写您的应⽤私钥,例如:MIIEvQIBADANB ... ... -->';$options->alipayCertPath = '<-- 请填写您的⽀付宝公钥证书⽂件路径,例如:/foo/alipayCertPublicKey\_RSA2.crt -->';$options->alipayRootCertPath = '<-- 请填写您的⽀付宝根证书⽂件路径,例如:/foo/alipayRootCert.crt" -->';$options->merchantCertPath = '<-- 请填写您的应⽤公钥证书⽂件路径,例如:/foo/appCertPublicKey\_2019051064521003.crt -->'; //注:如果采⽤⾮证书模式,则⽆需赋值上⾯的三个证书路径,改为赋值如下的⽀付宝公钥字符串即可// $options->alipayPublicKey = '<-- 请填写您的⽀付宝公钥,例如:MIIBIjANBg... -->';//可设置异步通知接收服务地址(可选)$options->notifyUrl = "<-- 请填写您的⽀付类接⼝异步通知接收服务地址,例如:https:///callback -->";//可设置AES密钥,调⽤AES加解密相关接⼝时需要(可选)//$options->encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";return $options;}2:实现⽀付宝⽀付//加载⽀付宝配置Factory::setOptions(self::getOptions());try {//发起API调⽤$result = Factory::payment()->wap()->pay('订单标题', '商户订单号', '订单总⾦额', '⽤户付款中途退出返回商户⽹站的地址', '⽀付回调地址');$responseChecker = new ResponseChecker();//处理响应或异常if ($responseChecker->success($result)) {//调⽤成功return $result->body;} else {//调⽤失败$errorMsg = $result->msg . $result->subMsg;throw new yii\\base\\ErrorException($errorMsg);}} catch (\\Exception $e) {throw new yii\\base\\ErrorException($e->getMessage());}根据如上就可以实现⽀付宝⽀付到此这篇关于php实现微信和⽀付宝⽀付的⽰例代码的⽂章就介绍到这了,更多相关php实现微信和⽀付宝⽀付内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

支付宝和微信支付流程和技术说明

支付宝和微信支付流程和技术说明

支付宝和微信支付流程和技术说明
1.1微信支付
1.1.1JSAPI网页支付
JSAPI网页支付即前文说的公众号支付,可在微信公众号、朋友圈、聊天会话中点击页面链接,或者用微信“扫一扫”扫描页面地址二维码在微
信中打开商户HTML5页面,在页面内下单完成支付。

1.1.2Native原生支付
Native原生支付即前文说的扫码支付,商户根据微信支付协议格式生成的二维码,用户通过微信“扫一扫”扫描二维码后即进入付款确认界面,输入密码即完成支付。

1.1.3接入方式
微信支付系统是指完成微信支付流程中涉及的
API接口、后台业务处理系统、账务系统、回调通知等系统的总称。

微信支付分为公众号支付,App支付,扫码支付(包括PC 网站),刷卡支付(设备扫描用户手
机)
本项目主要适用扫码支付。

接通扫码支付流程:
注册公众帐号申请微信
认证
申请微信
支付
商户平台
进行验证
在线签署
协议
启动设计
和开发
用户扫描商户展示在各种场景的二维码进行支付。

步骤1:商户根据微信支付的规则,为不同商品生成不同的二维码,展示在各种场景,用于用户扫描购买。

步骤2:用户使用微信“扫一扫”扫描二维码后,获取商品支付信息,引导用户完成支付。

步骤(3):用户确认支付,输入支付密码。

步骤(4):支付完成后会提示用户支付成功,商户后台得到支付成功的通知,然后进行发货处理。

开发步骤:。

记录:c#实现微信,支付宝扫码支付(一)

记录:c#实现微信,支付宝扫码支付(一)

记录:c#实现微信,支付宝扫码支付(一)因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能。

微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.app支付,5.h5支付,6.小程序支付我在这里用到的是native支付,就是网页生成二维码让用户扫码支付,再调用回调接口判断用户是否支付成功。

支付宝支付api也挺多的,我只使用了一些我在系统中能够用到的,现在将代码简单记录在这里,先从微信支付开始。

微信支付先上后台代码:传入参数(总金额一定要是int类型,微信默认是以分为单位),获取支付的url,然后用二维码生成工具将url地址转换为二维码图片并将文件流传回前台/*** 生成直接支付url,支付url有效期为2小时,模式二* @param productId 商品ID* @return 模式二URL*/public ActionResult GetPayUrl(){//参数WxPayData data = new WxPayData();data.SetValue("body", “test”);//商品描述data.SetValue("attach", "");//附加数据data.SetValue("out_trade_no",WxPayApi.GenerateOutTradeNo());//随机字符串data.SetValue("total_fee", 100);//总金额data.SetValue("time_start",DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间data.SetValue("time_expire",DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")) ;//交易结束时间data.SetValue("goods_tag", "");//商品标记data.SetValue("trade_type", "NATIVE");//交易类型data.SetValue("product_id", "1234");//商品IDWxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接var jsonData = new{url = HttpUtility.UrlEncode(url)};return Success(jsonData);}//将url转换为二维码图片public void CodeConversionT ool(string str){//初始化二维码生成工具QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;qrCodeEncoder.QRCodeVersion = 0;qrCodeEncoder.QRCodeScale = 4;//将字符串生成二维码图片Bitmap image = qrCodeEncoder.Encode(str, Encoding.Default);//保存为PNG到内存流MemoryStream ms = new MemoryStream();image.Save(ms, ImageFormat.Png);//输出二维码图片Response.BinaryWrite(ms.GetBuffer());Response.End();}前台代码:$.lrSetForm(top.$.rootUrl + 'Test/GetPayUrl',function (data) { $("#img").attr("src",top.$.rootUrl + '/Test/CodeConversionT ool?str=' + data.url);});回调方法:public string WxPayNotify(){WePayReturnModel payResult = new WePayReturnModel();HttpContextBase context = (HttpContextBase)Request.Properties["MS_HttpContext"];//获取传统contextHttpRequestBase request = context.Request;//定义传统request对象bool result = VerifyNotify(request, out payResult);if (result){//业务代码////////////////////////////////////////////////////如果成功,告知微信不用再调用回调方法WxPayData res = new WxPayData();res.SetValue("transaction_id", payResult.TradeNo);res.SetValue("return_code", "SUCCESS");res.SetValue("return_msg", "OK");return res.ToXml();}else{return "fail";}}这里有一些需要注意的地方,回调地址是区分大小写的,而且一定要用post,不支持get。

微信支付demo

微信支付demo

微信⽀付demo这⾥开发时使⽤的是thinkphp5.11.直接唤起微信⽀付<?phpnamespace app\index\controller;use wechatpay\lib\WxPayApi;use wechatpay\lib\WxPayUnifiedOrder;use wechatpay\example\JsApiPay;use wechatpay\example\WxPayConfig;use think\facade\Env;class Pay{/*1、交易⾦额交易⾦额默认为⼈民币交易,接⼝中参数⽀付⾦额单位为【分】,参数值不能带⼩数。

对账单中的交易⾦额单位为【元】。

外币交易的⽀付⾦额精确到币种的最⼩单位,参数值不能带⼩数点。

2、交易类型JSAPI--公众号⽀付、NATIVE--原⽣扫码⽀付、APP--app⽀付,统⼀下单接⼝trade_type的传参可参考这⾥MICROPAY--刷卡⽀付,刷卡⽀付有单独的⽀付接⼝,不调⽤统⼀下单接⼝3、货币类型货币类型的取值列表:CNY:⼈民币4、时间标准北京时间,时区为东⼋区;如果商户的系统时间为⾮标准北京时间。

参数值必须根据商户系统所在时区先换算成标准北京时间,例如商户所在地为0时区的伦敦,当地时间为2014年11⽉11⽇0时0分0秒,换算成北京时间为2014年11⽉11⽇8时 5、时间戳标准北京时间,时区为东⼋区,⾃1970年1⽉1⽇ 0点0分0秒以来的秒数。

注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。

6、商户订单号商户⽀付的订单号由商户⾃定义⽣成,仅⽀持使⽤字母、数字、中划线-、下划线_、竖线|、星号*这些英⽂半⾓字符的组合,请勿使⽤汉字或全⾓等特殊字符。

微信⽀付要求商户订单号保持唯⼀性(建议根据当前系统时间加随机序列来⽣成订单号) *//*** 微信⽀付调⽤* @author ffx* @param int $userId ⽤户id* @param float $money ⾦额* @param int $type ⽀付类型(1充值,2订单⽀付)* @param string $body 显⽰title,提⽰头信息* @param string $backUrl 回调地址(/index/pay/wxPayBack)* @param string $addition 附加参数(微信回调时原样返回)* @return bool|mixed*/public function wxPay($userId,$money,$type,$body,$backUrl,$addition = ''){$out_trade_no = self::getOrderNo();$wxchid = config('wechat.wxmchid');$wxAppId = config('wechat.paywxAppId');//微信⽀付sdk中的⽂件include_once EXTEND_PATH."wechatpay/lib/WxPay.Api.php";include_once EXTEND_PATH."wechatpay/example/WxPay.JsApiPay.php";$total_money = floor(sprintf("%0.3f",$money)*100);if(!$total_money || $total_money <= 0){return ['code'=>100001,'message'=>"⽀付⾦额⼩于0"];}if($_SERVER["REQUEST_SCHEME"] == "http"){$notify_url = 'http://'.$_SERVER['HTTP_HOST'].$backUrl;}else{$notify_url = 'https://'.$_SERVER['HTTP_HOST'].$backUrl;}//此处查询的是登录时存起来的openid$openid = Db::name('member')->where('id',$userId)->value('openid');$input = new \WxPayUnifiedOrder();$input->SetAppid($wxAppId);$input->SetMch_id($wxchid); //商户号$input->SetAttach($addition); //附加参数$nonceStr = self::createNonceStr();$input->SetNonce_str($nonceStr);//⾃定义随机字符串$input->SetBody($body);//$input->SetOut_trade_no($out_trade_no);//订单号,⾃⼰建$input->SetTotal_fee($total_money);//⾦钱$input->SetSpbill_create_ip($this->getIP());//客户端ip$input->SetTime_start(date("YmdHis"));$input->SetTime_expire(date("YmdHis", time() + 600));//过期时间$input->SetNotify_url($notify_url);//回调的接⼝地址$input->SetTrade_type("JSAPI");//⽀付类型$input->SetOpenid($openid);//此处两个是微信⽀付的sdk的类$WxPayApi = new WxPayApi();$config = new WxPayConfig();$response = $WxPayApi->unifiedOrder($config,$input);//预创建订单//写⼊⽀付记录表(业务逻辑处理)$res = $this->insertWxPayLog($userId,$out_trade_no,$money,$type,0);if(!$res){return false;}if($response['result_code']=='SUCCESS' && $response['return_code']=='SUCCESS' && $response['return_msg']=='OK') {$tools = new JsApiPay();$response['nonce_str'] = $nonceStr;$jsApiParameters = $tools->GetJsApiParameters($response);return json_decode($jsApiParameters);//$jsApiParameters⽰例//{"appId":"wx194a1075c8bca3d9","nonceStr":"4tmc7nttscu5w6u6cqbxlgvum4qs6p8y","package":"prepay_id=wx05155440194924091e0efc912670185750","signType":"MD5","timeStamp":"1541404480","paySign":"CD4DE57A6B5B2B5418 //输出直接唤起⽀付// $str = "<html><body></body></html>";//// $str .='<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>微信⽀付</title></head><body>';//// $str .= "<script>function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest',$jsApiParameters)}if(typeof WeixinJSBridge=='undefined'){if(document.addEventListener){document.addEventListener('WeixinJSBridgeReady',o//// echo $str;exit;}else{return false;}}/*** 余额⽀付回调* @author ffx**/function amountPayBack(){$xml = file_get_contents('php://input');$xmlJson = json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA));$arr = json_decode($xmlJson, true);//此处注释暂未⽤到/* //⽤户http_build_query()将数据转成URL键值对形式$sign = http_build_query($arr);//md5处理$sign = md5($sign);//转⼤写$sign = strtoupper($sign);//验签名。

微信支付与支付宝支付的对比分析

微信支付与支付宝支付的对比分析

微信支付与支付宝支付的对比分析随着移动支付的兴起,微信支付和支付宝支付成为了人们生活中不可或缺的一部分。

无论是在线购物、线下消费还是转账支付,微信支付和支付宝支付都提供了便捷的解决方案。

然而,微信支付和支付宝支付之间存在一些差异。

本文将对微信支付和支付宝支付进行对比分析,从用户体验、安全性、功能和商家支持等方面来探讨两者的优劣势。

首先,从用户体验方面来看,微信支付和支付宝支付都提供了简单易用的界面和操作流程。

微信支付通过扫描二维码或者点击链接即可完成支付,而支付宝支付则需要用户输入支付密码或者使用指纹识别等方式进行验证。

从操作上来说,微信支付更加便捷,但支付宝支付在安全性方面更有保障。

其次,安全性是人们选择支付方式时非常重要的考虑因素。

微信支付和支付宝支付都采用了多重安全防护措施,如手机绑定、短信验证和支付密码等。

然而,支付宝支付在安全性方面更加严格,采用了更多的技术手段来保护用户的资金安全。

此外,支付宝支付还提供了实名认证和风险控制系统,进一步提高了支付的安全性。

在功能方面,微信支付和支付宝支付都提供了丰富的功能。

微信支付除了可以用于线上购物和转账支付外,还可以用于线下消费、公共交通等。

支付宝支付则提供了更多的服务,如信用卡还款、水电煤缴费、理财等。

支付宝支付的功能更加全面,满足了用户多样化的需求。

最后,商家支持也是选择支付方式时需要考虑的因素之一。

微信支付和支付宝支付都为商家提供了便捷的支付解决方案,可以通过扫码支付、POS机和网页支付等方式来接收付款。

然而,支付宝支付在商家支持方面更胜一筹,拥有更多的商家合作伙伴和更广泛的应用场景。

综上所述,微信支付和支付宝支付在用户体验、安全性、功能和商家支持等方面都有各自的优劣势。

微信支付更加便捷,适用于日常生活中的各种场景;支付宝支付更加安全,提供了更多的功能和商家支持。

因此,在选择支付方式时,用户可以根据自己的需求和偏好来进行选择。

无论是微信支付还是支付宝支付,都为人们的支付生活带来了极大的便利。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[DEMO] 支付宝网页支付及微信网页扫码支付
DEMO包含支付宝网页支付以及微信扫码支付功能,相对于手机端支付,完善支付场景,使PC端与移动端都能实现支付需要。

摘要:
DEMO已经将支付宝及微信支付需要的配置信息独立化,导入,配置,即可使用。

对于各平台应用前置配置要求,接口各参数意义及用途,请参阅:
支付宝网页支付官方文档微信扫码支付(模式二)官方文档
XPZ下载:
Demo_PCPayment_20180102-114.1.zip(1.04 MB, 下载次数: 1) Note:修复支付宝支付成功页面PaySuccess验签参数SDT错误
XPZ下载:
Demo_PCPayment-114.2.zip(1.04 MB, 下载次数: 1)
另:此xpz中使用了支付宝服务端sdk,现只实现了.Net环境的封装,java 环境之后补充。

说明:
导入xpz,配置数据库连接信息,编译运行。

导入module结构如下:
打开访问pcpayment.main.aspx页面
点击“加载配置”按钮可以加载默认配置
按照文档说明配置各参数,点击“保存配置”按钮保存修改
页面下方是用户信息及各用户的支付记录,默认初始化了三个用户用于测试
点击“支付宝支付”按钮,进入支付宝支付页面
默认填入了商品信息及金额,点击页面下方“确认支付”按钮进行支付
正常情况下会返回一个form表单的字符串,及支付宝返回的订单信息
点击“访问上面的返回form支付”按钮,触发表单中自动提交事件,打开支付宝网页支付页面
完成支付后,将跳转到支付成功页面
返回main页面查看用户支付记录
可以查看到支付时间,同步返回及异步通知的信息。

可以看到,支付状态一栏中显示了接收到同步及异步信息的先后顺序,且用户关闭支付宝页面后将无法跳转到成功提示页面,及没有同步返回消息,因此,务必按照官方推荐,在异步通知中处理支付成功逻辑。

点击“微信支付”按钮,进入微信扫码支付页面
默认填入了订单信息及金额,点击“确认支付”按钮调用微信统一下单API,获取返回参数。

注意微信的金额单位是“分”,与支付宝“元”为单位不同。

且此参数不支持小数点,只能是整数,及1为最小金额,0.01元。

正常情况下可以获取到微信支付url,点击“将支付url转为二维码进行扫码支付”
按钮,获取二维码图片以进行扫码支付
支付完成后返回main页面查看用户支付记录
可以看到微信没有同步返回参数,依赖于异步通知,业务逻辑同样在异步通知时处理。

相关文档
最新文档