php版支付宝接口源代码
支付宝接口实现_参数以及实现方式
一、收银台①:收款账号,参数名:seller_email②:商品名称,参数名:subject④:订单总金额,参数名:total_fee④:特约商家标识。
若有特约商家资格,则显示该图标⑤:付款方式:余额付款、网银、卡通、网点⑥:买家账号。
该账号可填写支付宝账号或非支付宝账号的EMAIL或手机号。
参数名:buyer_email。
点击商品名称后,会下拉出来一些信息,如图:1、商品名称、展示地址,参数名:subject、show_url2、商品描述:参数名:body3、收款账号,参数名:seller_email4、特约商家标识。
若有特约商家资格,则显示该图标二、支付部分参数详解1、必填参数///////////////////////不需要更改值的参数///////////////////////service:服务名称。
这个是用来标明当前接口是什么接口。
因为每种接口都有属于自己的服务名称,支付宝为了辨识每种接口,就在这些接口上加了名称以示区别。
因此这个参数的值不需要改动。
按照不同的接口技术文档中的参数列表,对其赋于固定的值。
即时到帐接口服务名称的值是:create_direct_pay_by_usersign_type:签名方式。
它是影响参数签名加密使用的方式,目前支持MD5、RSA、DSA等方式加密。
_input_charset:参数编码字符集。
即所谓的编码格式。
一般网页右键可看到编码,打开扩展箭头后发现,默认的原点在哪种编码上,那么就能知道该网站使用的是什么编码。
目前绝大多数商户网站使用的编码格式是utf-8、gb2312(或GBK),接口也只支持这两种编码格式。
payment_type:支付类型。
默认为1,代表商品购买的意思。
目前所有的支付接口,这里都设置为1。
///////////////////////特殊参数///////////////////////sign:签名。
它是根据其他所有参数通过a到z的顺序排序以后,用&字符连接而成的字符串,对这个字符串加密以后得出的加密结果。
PHP接入微信H5支付的方法示例
PHP接⼊微信H5⽀付的⽅法⽰例开发前配置进⾏代码接⼊前,需在微信后台填写授权回调域名,此域名必须经过ICP备案开发主要流程⽤户下单时选择微信⽀付商户进⾏业务逻辑处理并调⽤微信统⼀下单接⼝,微信H5交易类型为:trade_type=MWEB调⽤下单接⼝成功时,微信会返回包含⽀付跳转URL等相关参数,商户通过参数mweb_url调起⽀付中间页在中间页微信会进⾏H5权限的校验⽀付成功,微信会向商户发送异步结果通知正式开发接⼝请求参数appid:微信公众号iDmch_id:账户号nonce_str:随机字符串,不长于32位sign:签名body:商品描述out_trade_no:商户订单号,不长于32位total_fee:总⾦额,以分为单位spbill_create_ip:⽤户端请求⽀付时的IPnotify_url:异步通知回调地址,必须是可直接访问地址,不能携带参数trade_type:交易类型,如H5则是MWEB以上便是H5⽀付下单所需要的参数签名⽣成参与⽣成签名的参数必须⾮空参数按照ASCII码由⼩到⼤排序,参数名区分⼤⼩写按照上述规则,将参数拼接成如k1=v1&k2=v2....的字符串将上⼀步得到的字符串拼接上key,如k1=v1&k2=v2&key=192006250b4c09247ec02e再将最后得到的字符串进⾏MD5加密,再转为⼤写,即为最终的sign值代码:/*** 组建签名* @param array $params 请求参数* @param string $key 秘钥*/public function genSign($params, $key){foreach ($params as $k=>$v) {if (!$v) {unset($params[$k]);}}ksort($params);$paramStr = '';foreach ($params as $k => $v) {$paramStr = $paramStr . $k . '=' . $v . '&';}$paramStr = $paramStr . 'key='.$key;$sign = strtoupper(md5($paramStr));return $sign;}发起请求将参数转为XML数据,即可发起请求将数组转为XML代码:/*** 将数组转为XML* @param array $params ⽀付请求参数*/public function array_to_xml($params){if(!is_array($params)|| count($params) <= 0) {return false;}$xml = "<xml>";foreach ($params as $key=>$val) {if (is_numeric($val)) {$xml.="<".$key.">".$val."</".$key.">";} else {$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";}}$xml.="</xml>";return $xml;}请求代码:$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $params);$return = curl_exec($ch);curl_close($ch);return $return;微信返回的是XML数据:<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><appid><![CDATA[wxdded766660f9b840]]></appid><mch_id><![CDATA[1516216351]]></mch_id><device_info><![CDATA[100]]></device_info><nonce_str><![CDATA[2DUN2i2pGnlC6vDi]]></nonce_str><sign><![CDATA[95CEA831D598299097A32D8FEEC6BDEF]]></sign><result_code><![CDATA[SUCCESS]]></result_code><prepay_id><![CDATA[wx22194530678545eb3713f2f10724143329]]></prepay_id><trade_type><![CDATA[MWEB]]></trade_type><mweb_url><![CDATA[https:///cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx22194530678545eb3713f2f10724143329&package=87106983]]></mweb_url>return_code为SUCCESS代表⽀付请求成功;mweb_url则为⽀付跳转页,此时客户端通过mweb_url已经可以调起微信⽀付中间页处理在得到微信返回的mweb_url参数后,可在服务端进⼀步获得deepLink代码:/*** 获取微信⽀付中间页deepLink参数* @param string $url 微信返回的mweb_url* @param string $ip ⽤户端IP*/public function getDeeplink(string $url, string $ip){$headers = array("X-FORWARDED-FOR:$ip", "CLIENT-IP:$ip");ob_start();$ch = curl_init();curl_setopt ($ch, CURLOPT_URL, $url);curl_setopt ($ch, CURLOPT_HTTPHEADER , $headers );curl_setopt ($ch, CURLOPT_REFERER, "");curl_setopt( $ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; Android 6.0.1; OPPO R11s Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36'); curl_exec($ch);curl_close ($ch);$out = ob_get_contents();ob_clean();$a = preg_match('/weixin:\/\/wap.*/',$out, $str);if ($a) {return substr($str[0], 0, strlen($str[0])-1);} else {return '';}}weixin://wap/pay?prepayid%3Dwx22201221074146ac747121890095299503&package=2656135616&noncestr=1542888966&sign=e31dbc2d1231708ff8a982b15a6c7646即为得到的deepLink值,客户端也可以通过此值直接调起⽀付以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
微信支付支付宝支付生成二维码的方法(php生成二维码的三种方法)
微信⽀付⽀付宝⽀付⽣成⼆维码的⽅法(php⽣成⼆维码的三种⽅法)如果图简单,可以⽤在线⽣成/share/qrcode?w=150&h=150&url=最简单最实例的goolge开源⽅法1.google开放api代码如下:[php]1. <span style="font-size:14px;">$urlToEncode="";2. generateQRfromGoogle($urlToEncode);3. /**4. * google api ⼆维码⽣成【QRcode可以存储最多4296个字母数字类型的任意⽂本,具体可以查看⼆维码数据格式】5. * @param string $chl ⼆维码包含的信息,可以是数字、字符、⼆进制信息、汉字。
6. 不能混合数据类型,数据必须经过UTF-8 URL-encoded7. * @param int $widhtHeight ⽣成⼆维码的尺⼨设置8. * @param string $EC_level 可选纠错级别,QR码⽀持四个等级纠错,⽤来恢复丢失的、读错的、模糊的、数据。
9. * L-默认:可以识别已损失的7%的数据10. * M-可以识别已损失15%的数据11. * Q-可以识别已损失25%的数据12. * H-可以识别已损失30%的数据13. * @param int $margin ⽣成的⼆维码离图⽚边框的距离14. */15. function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_level='L',$margin='0')16. {17. $chl = urlencode($chl);18. echo '<img src="/chart?chs='.$widhtHeight.'x'.$widhtHeight.'19. &cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$chl.'" alt="QR code" widhtHeight="'.$widhtHeight.'20. " widhtHeight="'.$widhtHeight.'"/>';21. } </span>2.php类库PHP QR Code下载官⽹提供的类库后,只需要使⽤phpqrcode.php就可以⽣成⼆维码了,当然您的PHP环境必须开启⽀持GD2。
ASP支付宝接口实现
支付宝有一个类文件叫AliPay 是一些加密算法之类的东西,包括构造URL要吧看一下这个类的全部内容using System.Web;using System.Text;using System.Security.Cryptography;using System.IO;using ;using System;/// <summary>/// New Interface for AliPay/// </summary>namespace Gateway{public class AliPay{/// <summary>/// 与ASP兼容的MD5加密算法/// </summary>public static string GetMD5(string s, string _input_charset){MD5 md5 = new MD5CryptoServiceProvider();byte[] t = puteHash(Encoding.GetEncoding(_input_charset).GetBytes(s)); StringBuilder sb = new StringBuilder(32);for (int i = 0; i < t.Length; i++){sb.Append(t[i].ToString("x").PadLeft(2, '0'));}return sb.ToString();}/// <summary>/// 冒泡排序法/// 按照字母序列从a到z的顺序排列/// </summary>public static string[] BubbleSort(string[] r){int i, j; //交换标志string temp;bool exchange;for (i = 0; i < r.Length; i++) //最多做R.Length-1趟排序{exchange = false; //本趟排序开始前,交换标志应为假for (j = r.Length - 2; j >= i; j--){//交换条件if (pareOrdinal(r[j + 1], r[j]) < 0){temp = r[j + 1];r[j + 1] = r[j];r[j] = temp;exchange = true; //发生了交换,故将交换标志置为真}}if (!exchange) //本趟排序未发生交换,提前终止算法{break;}}return r;}/// <summary>/// 生成URL链接或加密结果/// </summary>/// <param name="para">参数加密数组</param>/// <param name="_input_charset">编码格式</param> /// <param name="sign_type">加密类型</param>/// <param name="key">安全校验码</param>/// <returns>字符串URL或加密结果</returns> public static string CreatUrl(//string gateway,//GET方式传递参数时请去掉注释string[] para,string _input_charset,string sign_type,string key){int i;//进行排序;string[] Sortedstr = BubbleSort(para);//构造待md5摘要字符串;StringBuilder prestr = new StringBuilder();for (i = 0; i < Sortedstr.Length; i++){if (i == Sortedstr.Length - 1){prestr.Append(Sortedstr[i]);}else{prestr.Append(Sortedstr[i] + "&");}}prestr.Append(key);//生成Md5摘要;string sign = GetMD5(prestr.ToString(), _input_charset);//以下是POST方式传递参数return sign;//以下是GET方式传递参数//构造支付Url;// char[] delimiterChars = { '='};// StringBuilder parameter = new StringBuilder();// parameter.Append(gateway);// for (i = 0; i < Sortedstr.Length; i++)// {//UTF-8格式的编码转换// parameter.Append(Sortedstr[i].Split(delimiterChars)[0] + "=" + HttpUtility.UrlEncode(Sortedstr[i].Split(delimiterChars)[1]) + "&");// }//// parameter.Append("sign=" + sign + "&sign_type=" + sign_type);//// //返回支付Url;// return parameter.ToString();}//获取远程服务器ATN结果,验证是否是支付宝服务器发来的请求public static string Get_Http(string a_strUrl, int timeout){string strResult;try{HttpWebRequest myReq = (HttpWebRequest)HttpWebRequest.Create(a_strUrl); myReq.Timeout = timeout;HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse(); Stream myStream = HttpWResp.GetResponseStream();StreamReader sr = new StreamReader(myStream, Encoding.Default); StringBuilder strBuilder = new StringBuilder();while (-1 != sr.Peek()){strBuilder.Append(sr.ReadLine());}strResult = strBuilder.ToString();}catch (Exception exp){strResult = "错误:" + exp.Message;}return strResult;}}}而我们一般不用管这个类,只要保证能调用的到就行了,不用管他我们要做的很少,他是怎么工作的呢,这是开发文档里的工作图其实我们要处理的只有三个Aspx的文件,先看第一个吧Default.aspx这是一个请求的界面using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using Gateway;public partial class _Default : System.Web.UI.Page {protected void Page_Load(object sender, EventArgs e) {}protected void BtnAlipay_Click(object sender, EventArgs e){//业务参数赋值;string gateway = "https:///cooperate/gateway.do?"; //支付接口string service = "create_direct_pay_by_user"; //服务名称,这个是识别是何接口实现何功能的标识,请勿修改string seller_email = "写自己的"; //商家签约时的支付宝帐号,即收款的支付宝帐号string sign_type = "MD5"; //加密类型,签名方式“不用改”string key = "写自己的"; //安全校验码,与partner是一组,获取方式是:用签约时支付宝帐号登陆支付宝网站,在商家服务我的商家里即可查到。
支付宝支付环境搭建
⽀付宝⽀付环境搭建⼀、设置沙箱账户 注释:只要登陆上后沙箱应⽤上⾯就有⾃⼰的APPID和⽀付宝⽹关,⽀付宝⽹关就是⽀付宝给我们的api接⼝,⽽RSA2(SHA256)密钥是需要⾃⼰设置德。
2、设置密钥 下载⽀付宝⾃动⽣成密钥软件,将⾃⼰的应⽤私钥保存在本地,应⽤公钥发送给⽀付宝点击确认后就会得到⽀付宝发送给我们的⽀付宝公钥 3、下载⽀付宝钱包 通过⼿机扫码下载⽀付宝沙箱钱包,沙箱钱包的⽤户名和密码在在沙箱账户中查找⼆、设置Alipay 1、由于⽀付宝不提供python版本的sdk,所以需要⼿动编写python版本sdk。
2、编写python版本sdk 1、项⽬⽬录结构 2、settings配置(主要写⼀些必须的配置项)import osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))class AliPayConfig(object):# 商户app_id,即沙箱的APPIDapp_id = "2016081500252288"# 商户私钥路径merchant_private_key_path = os.path.join(BASE_DIR, "keys", "app_private_2048.txt")# ⽀付宝公钥路径alipay_public_key_path = os.path.join(BASE_DIR, "keys", "alipay_public_2048.txt")# 服务器异步通知页⾯路径需http: // 格式的完整路径,不能加?id = 123 这类⾃定义参数,必须外⽹可以正常访问# 向⽀付宝⽀付成功后,⽀付宝会执⾏回调函数来通知服务器的⽀付状态,即⽀付宝发送post请求是⽀付宝⽀付成功后调⽤服务器的验证函数,服务器来判断是否是真的⽀付成功notify_url = "http://47.94.172.250:8804/api/v1/trade/alipay/"# 页⾯跳转同步通知页⾯路径需http: // 格式的完整路径,不能加?id = 123 这类⾃定义参数,必须外⽹可以正常访问# 向⽀付宝⽀付成功后,⽀付宝会执⾏回调函数来通知服务器的⽀付状态,即⽀付宝发送get请求是⽀付宝⽀付成功后调⽤服务器的⽀付成功的页⾯信息return_url = "http://47.94.172.250:8804/api/v1/trade/alipay/"# 签名⽅式(当前只⽀持RSA和RSA2)sign_type = "RSA2"# 字符编码格式charset = "utf-8"# ⽀付宝⽹关(如果是线上环境的话, dev 这三个字去掉即可)gateway_url = "https:///gateway.do"# 异步通知参数DOC(⽀付宝会主动发起POST请求)notify_doc = "https:///270/105902/"View Code 3、⽀付宝公钥和应⽤私钥配置 注释:1、主要是存放在keys⽂件中,alipay_public_2048.txt中保存的是⽀付宝公钥,app_private_2048.txt中保存的是应⽤私钥。
支付宝支付--即时到账开发总结
⽀付宝⽀付--即时到账开发总结在⽀付宝⽀付的开发过程中,通过⾃⼰的理解和尝试做出⼀点流程总结记录: 如果项⽬拥有SSL加密协议,也就是HTTPS安全通道,可以使⽤rsa签名的⽅式进⾏开发。
⼆.先配置 alipay.config.php ⽂件:1//↓↓↓↓↓↓↓↓↓↓请在这⾥配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓2//合作⾝份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https:///order/pidAndKey.htm3$alipay_config['partner'] = '';4//收款⽀付宝账号,以2088开头由16位纯数字组成的字符串,⼀般情况下收款账号就是签约账号5$alipay_config['seller_id'] = $alipay_config['partner'];6//或者$alipay_config['seller_email']或者$alipay_config['seller_account_name']7// MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https:///order/pidAndKey.htm8$alipay_config['key'] = '';9// 服务器异步通知页⾯路径需http://格式的完整路径,不能加?id=123这类⾃定义参数,必须外⽹可以正常访问10$alipay_config['notify_url'] = "http://商户⽹址/create_direct_pay_by_user-PHP-UTF-8/notify_url.php";11// 页⾯跳转同步通知页⾯路径需http://格式的完整路径,不能加?id=123这类⾃定义参数,必须外⽹可以正常访问12$alipay_config['return_url'] = "http://商户⽹址/create_direct_pay_by_user-PHP-UTF-8/return_url.php";13//签名⽅式14$alipay_config['sign_type'] = strtoupper('MD5');15//字符编码格式⽬前⽀持 gbk 或 utf-816$alipay_config['input_charset']= strtolower('utf-8');17//ca证书路径地址,⽤于curl中ssl校验18//请保证cacert.pem⽂件在当前⽂件夹⽬录中19$alipay_config['cacert'] = getcwd().'\\cacert.pem';20//访问模式,根据⾃⼰的服务器是否⽀持ssl访问,若⽀持请选择https;若不⽀持请选择http21$alipay_config['transport'] = 'http';22// ⽀付类型,⽆需修改23$alipay_config['payment_type'] = "1";24// 产品类型,⽆需修改25$alipay_config['service'] = "create_direct_pay_by_user";26//↑↑↑↑↑↑↑↑↑↑请在这⾥配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑27//↓↓↓↓↓↓↓↓↓↓请在这⾥配置防钓鱼信息,如果没开通防钓鱼功能,为空即可↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓28// 防钓鱼时间戳若要使⽤请调⽤类⽂件submit中的query_timestamp函数29$alipay_config['anti_phishing_key'] = "";3031// 客户端的IP地址⾮局域⽹的外⽹IP地址,如:221.0.0.132$alipay_config['exter_invoke_ip'] = "";33//↑↑↑↑↑↑↑↑↑↑请在这⾥配置防钓鱼信息,如果没开通防钓鱼功能,为空即可↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑官⽅demo注解已经写得很详细了,值得⾄于的问题$alipay_config['partner'] $alipay_config['key'] $alipay_config['seller_id/seller_email/seller_account_name'](该参数三选⼀卖家的⽀付宝⽤户号/账号/账号别名)这三个参数是由⽀付宝开发平台提供的。
支付宝Python版SDK
支付宝Python版SDK作者:邓占国# -*- coding:utf-8 -*-#-----------------------------------# alipay python sdk# 版本: Python 2.6, 2.7# 第三方库: requests, rsa# 包含支付宝配置信息,业务流程处理,函数# QQ:1454378241 divt#-----------------------------------RES_INFO = 9 #异常"""配置信息调试时请替换为自己的支付宝信息,测试key是错的,修改时请注意格式"""RSA_ALIPAY_PUBLIC = """-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNA5234535fasfsadfasfdsafPdyPuBV64bfQNN1PjbCzkIM6qRd KBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UB VOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB-----END PUBLIC KEY-----"""#商户私钥RSA_PRIVATE ="""-----BEGIN RSA PRIVATE KEY-----MIICXAIBAAKBgQCslpBgJhEFGG54Dn9oTz4IVA4D2F4/mx+IinE783+N9g2QNWVXyL4DgyDnGfpEtG+mh9wqR+AjFKLnAWwoOPZb0lDeHyrBviUuoj6SlrGEKYbx3Mc0wCq3CJKKGR4ELxNMXgdbBJP0FK7K3qLqQRIqPeCkSrwUAhZL/6pPYu36zwIDAQABAoGBAIj32M6lhz5e/FTFVLHIqbdcVd8RWQLrriPjkyf8AA/+5Ra8eZgoVTxeVb9yq17ZP/6OtdjMtetrewtewtetwetresOKn20RMgN5gTwFtx0LmplelxIKi9+sAuozCxzoejceqyI0tub3J29fw+klOh1UhMCxXnoOCwRRbuqeoWmZAkEA38LgSljePkYs MSJmpgAobMiwHQsuh63KLR3/tb7Oqp6GaTr9wPwnAEYRoEs7s43laqUV1ZKOFz3P5/8e9BzQYwJBAMV0PS2dEmO633576567fghdfhads2NsXxBVruy1vlyi4od7yox6 WqgpZOOBQ34wLFHzNhtFLY3umQCVTPaWGaUCQE29VdFeuK/oD1huvDz2FxVcUBt3FA5dab1tC7cn+IM8mjQbI6gVsrMcpOkM2kwSg18excwyo50dg4r1jtp+3EMCQGREosyG9s+QNGt5Pkfasfasfdasfasd544560yU/hYMoPwr4K91cpPycUkWWy+5RshWuSMf/gIVJ50kM/EESAECQGaTj1714Fe1uomYNClkTluZDPF06d6c7y78R3c7QhxAkKlCsuU/zb5WcX3oI0TxUS5mVuGWMEWvq/zJHplDZR4=-----END RSA PRIVATE KEY-----"""RSA_PUBLIC = """-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCslpBgJhEFGG54Dn9oTz4IVA4D2F4/mx+IinE783+53455343435543dfgdfsaddfmh9wqR+AjFKLnAWwoOPZb0lDeHyrBviUuoj6Slfsafdbx3Mc0wCq3CJKKGR4ELxNMXgdbBJP0FK7K3qLqQRIqPeCkSrwUAhZL/6pPuyt6zwIDAQAB-----END PUBLIC KEY-----"""partner_id = 200854646465465 #支付宝商家后台的合作商IDkey = "x6lmikee5cfkpv0sicx3i24qpa3yggdk" # 支付宝商家后台的密钥管理-安全校验码(Key) alipay_account="aaa@" #支付宝商家的支付宝邮箱class AlipayHandler(tornado.web.RequestHandler):@tornado.web.asynchronousdef post(self):self.set_header("Content-Type", "application/json; charset=UTF-8")try:('alipay_body:%s' % self.request.arguments)res = {}args = self.request.arguments # 支付宝通知内容for k, v in args.items():args[k] = v[0]check_sign = params_to_string(args)params = string_to_dict(check_sign)sign = params['sign'] # 支付宝通知的signparams = params_filter(params)signature_str = params_to_verify_string(params,quotes=False,reverse=False) # 获取到要验证签名的串check_res = check_ali_sign(signature_str,sign) # 验签if check_res == False:res = "fail"# 这里是去访问支付宝验证订单是否正常res = verify_from_gateway({"partner": partner_id, "notify_id": params["notify_id"]})if res == False:res = "fail"trade_status = params["trade_status"] # 支付宝交易状态out_trade_no = params["out_trade_no"] # 系统订单NO.alipay_order = params["trade_no"] # 支付宝的订单NO.total_fee = params["total_fee"] # 支付总额#--------------------------------------------------------------# 付款完成后业务逻辑#--------------------------------------------------------------if trade_status == "TRADE_SUCCESS":# 支付成功# 这里处理订单付款成功后的逻辑res = "success"if trade_status == "TRADE_FINISHED":# 交易成功returnif trade_status == "WAIT_BUYER_PAY":# 交易创建res = "success"if trade_status == "TRADE_CLOSED":# 退款会回调这里res = "success"except:logger.error(u'Alipay notice have a error', exc_info=True)res = RES_INFOself.finish(res)#--------------------------------------------# 处理函数# -------------------------------------------def params_to_string(params, quotes=False, reverse=False): """生成需要签名的字符串:param params::return:"""""":param params::return:"""query = ""for key in sorted(params.keys(), reverse=reverse):value = params[key]if quotes == True:query += str(key) + "=\"" + str(value) + "\"&"else:query += str(key) + "=" + str(value) + "&"query = query[0:-1]return querydef string_to_dict(query):"""将string转换成字典:param query::return:"""res = {}k_v_pairs = query.split("&")for item in k_v_pairs:sp_item = item.split("=", 1) #注意这里,因为sign秘钥里面肯定包含'='符号,所以splint一次就可以了key = sp_item[0]value = sp_item[1]res[key] = valuereturn resdef params_filter(params):"""去掉不需要验证前面的参数:param params::return:"""""":param params::return:"""ret = {}for key, value in params.items():if key == "sign" or key == "sign_type" or value == "":continueret[key] = valuereturn retdef params_to_verify_string(params, quotes=False, reverse=False):"""生成需要签名的字符串:param params::return:"""""":param params::return:"""query = ""for key in sorted(params.keys(), reverse=reverse):value = params[key]if quotes == True:query += str(key) + "=\"" + str(value) + "\"&"else:query += str(key) + "=" + str(value) + "&"query = query[0:-1]return querydef verify_from_gateway(params_dict):"""从支付宝网关验证通知是否合法:param params_dict::return:"""ali_gateway_url = "https:///gateway.do?service=notify_verify&partner=%(partner)d¬ify_id=%(n otify_id)s"notify_id = params_dict["notify_id"]partner = partner_idali_gateway_url = ali_gateway_url % {"partner": partner, "notify_id": notify_id}cafile = 'cacert.pem' # http://curl.haxx.se/ca/cacert.pem# 这里注意一下,如果你的python版本是2.6请求支付宝时会报错,请使用以下python 2.6的格式# SSLError: [Errno 1] _ssl.c:492: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed# requests.get(ali_gateway_url, verify=cafile)# python 2.6# res = requests.get(ali_gateway_url, verify=False)# python 2.7# res = requests.get(ali_gateway_url, verify=cafile)res = requests.get(ali_gateway_url, verify=cafile)if res.text == "true":return True return False。
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实现微信和⽀付宝⽀付内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
前端h5调起支付宝扫码付款,附上启动支付宝常用命令
前端h5调起⽀付宝扫码付款,附上启动⽀付宝常⽤命令在开发⼀些⽀付宝相关功能的⽹页时,有些情况需要直接调起⽀付宝APP的某个功能,那么在前端直接⽤⼀段简单的命令来调起是最⽅便的。
⽤法也简单,直接⽤⼀个a标签来跳转就可以。
举个例⼦,⽐如我项⽬中使⽤的调起⽀付宝扫码付款——<a href='alipays://platformapi/startapp?appId=20000067&url=⽀付宝收款码⽀付地址'> 跳转⽀付宝⽀付</a>然后,有的时候这样也没办法成功调起,那么再加个前缀转化⼀下。
https:///p/s/i?scheme=PS:注意要把等号后⾯这串地址urlencode编码转化。
下⾯是⼀些常⽤的唤醒⽀付宝某项功能的命令mes = “alipayqr://platformapi/startapp?saId=10000003”;⼿机充值mes = “alipayqr://platformapi/startapp?saId=10000007”;扫⼀扫mes = “alipayqr://platformapi/startapp?saId=10000009”;爱⼼捐赠mes = “alipayqr://platformapi/startapp?saId=100000011”;彩票⾸页mes = “alipayqr://platformapi/startapp?saId=100000033”;话费卡转让mes = “alipayqr://platformapi/startapp?saId=10000110”;关于mes = “alipayqr://platformapi/startapp?saId=10000112”;服务授权mes = “alipayqr://platformapi/startapp?saId=20000116”;转账mes = “alipayqr://platformapi/startapp?saId=20000056”;付款码mes = alipays://platformapi/startapp?appId=20000003;账单mes = alipays://platformapi/startapp?appId=20000076;账单mes = “alipays://platformapi/startapp?appId=20000006”;切换账户mes = “alipays://platformapi/startapp?appId=20000008”;⽀付宝登出mes = “alipays://platformapi/startapp?appId=20000009”;⼿机号注册mes = “alipays://platformapi/startapp?appId=20000010”;绑定⼿机mes = “alipays://platformapi/startapp?appId=20000011”;客服帮助mes = “alipays://platformapi/startapp?appId=20000013”;修改⽀付密码mes = “alipays://platformapi/startapp?appId=20000014”;我的银⾏卡mes = “alipays://platformapi/startapp?appId=20000015”;找回登录密码mes = “alipays://platformapi/startapp?appId=20000017”;修改登录密码mes = “alipays://platformapi/startapp?appId=20000019”;余额mes = “alipays://platformapi/startapp?appId=20000020”;卡包mes = “alipays://platformapi/startapp?appId=20000024”;⽀付宝设置mes = “alipays://platformapi/startapp?appId=20000027”;账号切换mes = “alipays://platformapi/startapp?appId=20000031”;设置个⼈头像mes = “alipays://platformapi/startapp?appId=20000032”;余额宝mes = “alipays://platformapi/startapp?appId=20000033”;提现mes = “alipays://platformapi/startapp?appId=20000038”;⾝份验证mes = “alipays://platformapi/startapp?appId=20000048”;添加⽣活好mes = “alipays://platformapi/startapp?appId=20000049”;意见反馈mes = “alipays://platformapi/startapp?appId=20000050”;打开地图mes = “alipays://platformapi/startapp?appId=20000057”;账号管理mes = “alipays://platformapi/startapp?appId=20000068”;快速挂失mes = “alipays://platformapi/startapp?appId=20000068”;安全中⼼mes = “alipays://platformapi/startapp?appId=20000071”;城市⼀卡通mes = “alipays://platformapi/startapp?appId=20000078”;上银汇款mes = “alipays://platformapi/startapp?appId=20000081”;更多mes = “alipays://platformapi/startapp?appId=20000122”;⾸页活动mes = “alipays://platformapi/startapp?appId=20000123”;收钱mes = “alipayqr://platformapi/startapp?appId=68687017”;年度账单mes = “alipayqr://platformapi/startapp?appId=20000101”;⽣活号mes = “alipayqr://platformapi/startapp?appId=20000102”;打开nfcmes = “alipayqr://platformapi/startapp?appId=20000107”;出境mes = “alipayqr://platformapi/startapp?appId=20000108”;挂号就诊mes = “alipayqr://platformapi/startapp?appId=20000110”;我的保障mes = “alipayqr://platformapi/startapp?appId=20000115”;设备管理mes = “alipayqr://platformapi/startapp?appId=20000119”;阿⾥游戏mes = “alipayqr://platformapi/startapp?appId=20000118”;芝⿇信⽤mes = “alipayqr://platformapi/startapp?appId=20000120”;饿了么mes = “alipayqr://platformapi/startapp?appId=20000123”;收钱mes = “alipayqr://platformapi/startapp?appId=20000125”;⾸页mes = “alipayqr://platformapi/startapp?appId=20000126”;免费wifimes = “alipayqr://platformapi/startapp?appId=20000130”;滴滴mes = “alipayqr://platformapi/startapp?appId=20000132”;亲情号mes = “alipayqr://platformapi/startapp?appId=20000134”;股票⾃选mes = “alipayqr://platformapi/startapp?appId=20000135”;⽕车票mes = “alipayqr://platformapi/startapp?appId=20000136”;游戏充值mes = “alipayqr://platformapi/startapp?appId=20000139”;酒店搜索mes = “alipayqr://platformapi/startapp?appId=20000141”;修改昵称mes = “alipayqr://platformapi/startapp?appId=20000142”;娱乐宝mes = “alipayqr://platformapi/startapp?appId=20000143”;⽕车票汽车票预定mes = “alipayqr://platformapi/startapp?appId=20000146”;我的淘宝mes = “alipayqr://platformapi/startapp?appId=20000150”;汇率换算mes = “alipayqr://platformapi/startapp?appId=20000153”;游戏中⼼mes = “alipayqr://platformapi/startapp?appId=20000155”;飞猪mes = “alipayqr://platformapi/startapp?appId=20000157”;国际机票查询mes = “alipayqr://platformapi/startapp?appId=20000160”;蚂蚁会员mes = “alipayqr://platformapi/startapp?appId=20000161”;理财⼩⼯具mes = “alipayqr://platformapi/startapp?appId=20000162”;⽺城通mes = “alipayqr://platformapi/startapp?appId=20000165”;定期理财mes = “alipayqr://platformapi/startapp?appId=20000161”;指纹⼿势解锁mes = “alipayqr://platformapi/startapp?appId=20000168”;年度账单mes = “alipayqr://platformapi/startapp?appId=20000176”;红包mes = “alipayqr://platformapi/startapp?appId=20000183”;设置⼿势密码mes = “alipayqr://platformapi/startapp?appId=20000161”;指纹⼿势解锁设定界⾯mes = “alipayqr://platformapi/startapp?appId=20000186”;通讯录mes = “alipayqr://platformapi/startapp?appId=20000161”;绑定智能⼿环mes = “alipayqr://platformapi/startapp?appId=20000197”;⾸页-热门游戏mes = “alipayqr://platformapi/startapp?appId=20000199”;花呗mes = “alipayqr://platformapi/startapp?appId=20000205”;亲情圈mes = “alipayqr://platformapi/startapp?appId=20000218”;黄⾦mes = “alipayqr://platformapi/startapp?appId=20000225”;借条mes = “alipayqr://platformapi/startapp?appId=20000227”;卡包mes = “alipayqr://platformapi/startapp?appId=20000234”;刷脸mes = “alipayqr://platformapi/startapp?appId=20000235”;服务提醒mes = “alipayqr://platformapi/startapp?appId=20000241”;车险服务mes = “alipayqr://platformapi/startapp?appId=20000243”;总资产mes = “alipayqr://platformapi/startapp?appId=20000248”;个性签名mes = “alipayqr://platformapi/startapp?appId=20000252”;朋友模块mes = “alipayqr://platformapi/startapp?appId=20000255”;账户充值mes = “alipayqr://platformapi/startapp?appId=20000266”;邮箱账单mes = “alipayqr://platformapi/startapp?appId=20000288”;聊天室mes = “alipayqr://platformapi/startapp?appId=20000290”;可能认识的⼈mes = “alipayqr://platformapi/startapp?appId=20000298”;证书管理mes = “alipayqr://platformapi/startapp?appId=20000301”;多设备管理mes = “alipayqr://platformapi/startapp?appId=20000305”;⽀付宝内付款码声波付mes = “alipayqr://platformapi/startapp?appId=20000307”;暗号还有其他的欢迎评论分享⼀下~。
php支付宝签名验证类
php⽀付宝签名验证类<?php/** 黎明互联* https:///*/class RSA{/*** RSA签名* @param $data 待签名数据* @param $private_key 私钥字符串* return 签名结果*/function rsaSign($data, $private_key,$type = 'RSA') {$search = ["-----BEGIN RSA PRIVATE KEY-----","-----END RSA PRIVATE KEY-----","\n","\r","\r\n"];$private_key=str_replace($search,"",$private_key);$private_key=$search[0] . PHP_EOL . wordwrap($private_key, 64, "\n", true) . PHP_EOL . $search[1];$res=openssl_get_privatekey($private_key);if($res){if($type == 'RSA'){openssl_sign($data, $sign,$res);}elseif($type == 'RSA2'){//OPENSSL_ALGO_SHA256openssl_sign($data, $sign,$res,OPENSSL_ALGO_SHA256);}openssl_free_key($res);}else {exit("私钥格式有误");}$sign = base64_encode($sign);return $sign;}/*** RSA验签* @param $data 待签名数据* @param $public_key 公钥字符串* @param $sign 要校对的的签名结果* return 验证结果*/function rsaCheck($data, $public_key, $sign,$type = 'RSA') {$search = ["-----BEGIN PUBLIC KEY-----","-----END PUBLIC KEY-----","\n","\r","\r\n"];$public_key=str_replace($search,"",$public_key);$public_key=$search[0] . PHP_EOL . wordwrap($public_key, 64, "\n", true) . PHP_EOL . $search[1];$res=openssl_get_publickey($public_key);if($res){if($type == 'RSA'){$result = (bool)openssl_verify($data, base64_decode($sign), $res);}elseif($type == 'RSA2'){$result = (bool)openssl_verify($data, base64_decode($sign), $res,OPENSSL_ALGO_SHA256);}openssl_free_key($res);}else{exit("公钥格式有误!");}return $result;}}<?phprequire "RSA.php";/***** Class Base* ⽀付宝基类*/class Base extends RSA{/*** 以下信息需要根据⾃⼰实际情况修改*/const PID = '⽀付宝后台获取';//合作伙伴IDconst REURL = '';//同步通知地址const NOURL = '';//异步通知地址const KEY = '⽀付宝后台获取';const PAYGAGEWAY = 'https:///gateway.do';const APPPRIKEY ="";const ALIPUBKEY = '';const APPID = '';const NEW_ALIPUBKE = '';const NEW_PAYGATEWAY = 'https:///gateway.do';//⽣成json數據的⽅法public function getStr($arr,$type = 'RSA'){//筛选if(isset($arr['sign'])){unset($arr['sign']);}if(isset($arr['sign_type']) && $type == 'RSA'){unset($arr['sign_type']);}//排序ksort($arr);//拼接return $this->getUrl($arr,false);}//将数组转换为url格式的字符串public function getUrl($arr,$encode = true){if($encode){return http_build_query($arr);}else{return urldecode(http_build_query($arr));}}//获取签名MD5public function getSign($arr){return md5($this->getStr($arr) . self::KEY );}//获取含有签名的数组MD5public function setSign($arr){$arr['sign'] = $this->getSign($arr);return $arr;}//获取签名RSApublic function getRsaSign($arr){return $this->rsaSign($this->getStr($arr), self::APPPRIKEY) ;}//获取含有签名的数组RSApublic function setRsaSign($arr){$arr['sign'] = $this->getRsaSign($arr);return $arr;}//获取签名RSA2public function getRsa2Sign($arr){return $this->rsaSign($this->getStr($arr,'RSA2'), self::APPPRIKEY,'RSA2') ;}//获取含有签名的数组RSApublic function setRsa2Sign($arr){$arr['sign'] = $this->getRsa2Sign($arr);return $arr;}//记录⽇志public function logs($filename,$data){file_put_contents('./public/logs/' . $filename, $data . "\r\n",FILE_APPEND);}//2.验证签名public function checkSign($arr){$sign = $this->getSign($arr);if($sign == $arr['sign']){return true;}else{return false;}}//验证是否来之⽀付宝的通知public function isAlipay($arr){$str = file_get_contents(self::CHECKURL . $arr['notify_id']);if($str == 'true'){return true;}else{return false;}}// 4.验证交易状态public function checkOrderStatus($arr){if($arr['trade_status'] == 'TRADE_SUCCESS' || $arr['trade_status'] == 'TRADE_FINISHED'){return true;} else {return false;}}}、、、、55555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、。
快捷登录接口(alipay.auth.authorize)
9.1 快捷登录业务错误码........................................................................................................... 18 9.2 系统错误码 ......................................................................................................................... 19 9.3 用户等级 ............................................................................................................................. 20 9.4 用户等级类型...................................................................................................................... 20
4.1 含义 ...................................................................................................................................... 8 4.2 列表 ...................................................................................................................................... 8 4.3 样例 .................................................................................................................................... 10
支付宝支付接口
⽀付宝⽀付接⼝常见⽀付⽅式:微信⽀付、⽀付宝⽀付、银⾏卡⽀付。
⽀付宝⽀付接⼝的类型:(商家的集成⽅案)担保交易接⼝⽤户⽀付的资⾦先进⼊担保账户,确认收货后才进⼊商家的账户即时到帐接⼝⽤户⽀付的资⾦⽴即进⼊商家账户担保交易接⼝在2016年8⽉已经停⽌申请。
⽀付宝⽀付流程:1.创建应⽤(企业⾝份正式环境)1⽀付宝开放平台:2使⽤⾃⼰的账号登录3创建应⽤4添加能⼒-电脑⽹站⽀付5 签约:需要审核需要填写个体⼯商户信息,个⼈⾝份⽆法继续签约。
2.沙箱应⽤(个⼈开发者测试环境)⽀付宝为没有个体商户资质的开发测试⼈员提供了⼀个测试环境,即沙箱应⽤。
在沙箱环境可以看到appid、测试⽀付宝⽹关、密钥信息在沙箱帐号⾥边可以看到商家信息和买家信息进⾏付款的时候,就使⽤买家帐号3.配置秘钥4.SDK的下载与配置下载解压config.php: 配置⽂件,配置⽀付宝参数index.php: demo⽰例⽂件(⽀付宝效果体现)notify_url.php: 异步回调地址(通知页⾯),⽀付宝以post隐藏⽅式向商家发起请求,该⽅式请求安全,⽤于处理业务逻辑:⽐如商家在该请求⾥可以修改订单状态return_url.php: 同步回调地址(通知页⾯),⽀付宝通过get显⽰⽅式向商家发起请求,该⽅式请求不安全,⽤于页⾯展⽰SDK&DEMO的使⽤:把解压后的⽬录移动到项⽬⽬录中的public/plugins⽬录并改名为alipay通过浏览器直接访问点击付款会跳转页⾯报错,需要先配置⽀付宝参数设置⽅式:从沙箱应⽤页⾯,获取到APPID, ⽀付宝⽹关,⽀付宝公钥配置秘钥时⽣成的商户私钥配置到public/plugins/alipay/config.php中说明:notify_url 是⽤来提供给⽀付宝服务端调⽤的,必须是外⽹可以访问的路径Return_url是⽤来页⾯同步跳转成功页⾯,是由浏览器跳转,原则上必须是外⽹可以访问的路径,这⾥测试可以使⽤本地的地址,也能跳转成功。
PHP开发API接口的实例代码
PHP开发API接口的实例代码分享一例php实现API接口的代码,实现用户的注册、登录、查询用户信息的功能,是学习PHP API开发的不错实例,有兴趣的朋友研究下吧。
PHP API接口的服务端部分代码示例:<?php/***一览()* PHP开发API接口服务端*/require 'conn.php';header('Content-Type:text/html;charset=utf-8');$action = $_GET['action'];switch ($action) {//注册会员case"adduserinfo";$username = lib_replace_end_tag(trim($_GET['username']));$password2 = lib_replace_end_tag(trim($_GET['userpassword']));$password = md5("$password2" . ALL_PS);$email = lib_replace_end_tag(trim($_GET['email']));if ($username == '' || $password2 == '' || $password == '') {$res = urlencode("参数有误");exit(json_encode($res)); //有空信息}$sql = "select username from `member` where username='$username'";$query = mysql-query.html target=_blank class=infotextkey>mysql_query()($sql, $conn);$count = mysql_num_rows($query);if ($count > 0) {exit(json_encode(1)); //返回1表示注册失败} else {$addsql = "insert into `member` (username,password,email) values ('$username','$password','$email')";mysql_query($addsql);exit(json_encode(0)); //返回0表示注册成功}//查询用户信息case"selectuserinfo";$username = lib_replace_end_tag($_GET['username']);$sql = "select id,username,nickname,mobile from `member` where username='$username'";$query = mysql_query($sql, $conn);$row = mysql_fetch_array($query);foreach ($row as $key => $v) {$res[$key] = urlencode($v);}exit(json_encode($res));break;//会员登录case"userlogin";$username = lib_replace_end_tag($_GET['username']);$password2 = lib_replace_end_tag(trim($_GET['userpassword']));$password = md5("$password2" . ALL_PS);$sqluser = "select id,username,password from `member` where username='" . $username . "' and password='" . $password . "'";$queryuser = mysql_query($sqluser);$rowuser = mysql_fetch_array($queryuser);if ($rowuser && is_array($rowuser) && !empty($rowuser)) {if ($rowuser['username'] == $username && $rowuser['password'] == $password) { if ($rowuser['password'] == $password) {$res = urlencode("登录成功");exit(json_encode($res));} else {$res = urlencode("密码错误");exit(json_encode($res));}} else {$res = urlencode("用户名不存在");exit(json_encode($res));}} else {$res = urlencode("用户名密码错误");exit(json_encode($res));}/** 0:表示登录成功,1:表示密码错误,2:用户名不存在,3:用户名密码错误*/default:exit(json_encode(error));}}PHP API 客户端部分代码示例:<?php/*** PHP API接口客户端* edit: */header('Content-Type:text/html;charset=utf-8'); //避免输出乱码function httpPost($url, $parms) {$url = $url . $parms;if (($ch = curl_init($url)) == false) {throw new Exception(sprintf()("curl_init error for url %s.", $url));}curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 600);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);if (is_array($parms)) {curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data;'));}$postResult = @curl_exec($ch);$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);if ($postResult === false || $http_code != 200 || curl_errno($ch)) {$error = curl_error($ch);curl_close($ch);throw new Exception("HTTP POST FAILED:$error");} else {// $postResult=str_replace()("\xEF\xBB\xBF", '', $postResult);switch (curl_getinfo($ch, CURLINFO_CONTENT_TYPE)) {case 'application/json':$postResult = json_decode()($postResult);break;}curl_close($ch);return $postResult;}}$postUrl = "/api/server.php";$p=$_GET['p'];if ($p =="selectuserinfo") {$username = $_GET['username'];$parms = "?action=selectuserinfo&username=" . $username . "";} elseif ($p =="adduserinfo") {$username = $_GET['username'];$userpassword = $_GET['userpassword'];$parms = "?action=adduserinfo&username=" . $username . "&userpassword=" . $userpassword . "";} elseif ($p =="userlogin") {$username = $_GET['username'];$userpassword = $_GET['userpassword'];$parms = "?action=userlogin&username=" . $username . "&userpassword=" . $userpassword . "";}$res = httpPost($postUrl, $parms); //$parms$res = json_decode($res);print_r(urldecode(json_encode($res)));}。
支付宝接入教程以及服务端给app写支付接口入门
关于支付宝接入的几点说明和解释在实际的开发中,我们看到开放平台密钥和合作伙伴密钥的时候,有没有直接就懵逼了的赶脚?反正我是的有。
因为不是每个人都经常去开发支付功能,更不会有事儿没事儿去调这些个密钥,毕竟跟钱相关的东西,谁都会冷静三分!鉴于此,我简略说两点。
1.官方答复说,合作伙伴密钥适用于合作伙伴密钥常被适用于API 1.0版本的支付和移动支付(手机网页支付),而开放平台密钥是作为APP支付设定的。
经实际测试:合作伙伴密钥和开放平台密钥在移动支付(手机网页支付)和APP支付中都是没有问题的!2.支付分为两种形式:一是demo接入方式(API 1.0的接入方式),一种是sdk调用API(此为API 2.0的接入方式)下面是分别对两种接入的解释说明:一.demo接入方式(API 1.0的接入方式中(官方答复)1.0的支付api service为:$alipay_config['service'] = "er";服务端程序demo地址为:https:///doc2/detail?treeId=60&articleId=103564&docType=1文档地址为:https:///docs/doc.htm?spm=a219a.7629140.0.0.Wp8Ll3&treeId=60&articleI d=104424&docType=1打开demo当中的配置文件alipay.config.php能看到Parenter 是合作身份PID。
这个只要进行了支付宝签约就能看到,签约流程可以在https:///中找到,不再进行说明。
值得注意的是seller_id在官方的demo中可以看出seller_id 是partner,实际上seller_id 也可以是商家的支付宝账号。
从上面的配置中能看到私钥和支付宝公钥是直接写进去的。
这有个要注意的地方,就是私钥和支付宝公钥必须一行存放,不能复制工具里面生成的文件中的begin和end注释行。
财付通php接口
/s/blog_5ff91fc50100dtim.ht ml 财付通是腾讯推出的一项类似支付宝的在线交易工具,分为两种:一种是财付通即时到帐交易,另外一种是财付通担保交易,即时到帐交易网上有很多接口,下面我谈谈财付通担保交易,基本程序如下图所示:1:tenpay_config.php 程序代码:<?//此文件为财付通支付配置文件//☆★☆★☆★☆★☆★☆★财付通测试开关0 关闭测试 1 开启测试☆★☆★☆★☆★☆★☆★$beta_switch ="0";//☆★☆★☆★☆★☆★☆★系统配置☆★☆★☆★☆★☆★☆★//以下每一项都必须要配置,并准确$version = "2";//版本号2$cmdno = "12";//任务代码,定值:12$encode_type = "1" ;//编码标准$chnid = "3692020";//平台提供者,***商的财付通账号$mch_type = "1";//交易类型:1、实物交易,2、虚拟交易。
//☆★☆★☆★☆★☆★☆★财付通支付配置项。
☆★☆★☆★☆★☆★☆★//以下每一项都必须要配置,并准确$seller ="573432430" ;//卖家帐号(我这里是乱配的,你需要填写正确的)$sp_key ="520530" ;//密钥(我这里是乱配的,你需要填写正确的)$domain ="" ;//商户网站域名$tenpay_dir ="/tenpay";//财付通安装目录$site_name ="顺心门业";//商户网站名称$attach ="tencent_magichu";//支付附加数据,非中文标准字符$imgtitle ="财付通支付";//图片说明$imgsrc =tenpay_dir&"/image/tenpay_buy.gif";//图片地址$pay_url ="https:///cgi-bin/med/show_opentrans. cgi"; //财付通支付网关地址$need_buyerinfo ="2";$mch_returl = ""; //通知URL$show_url = $domain . $tenpay_dir ."/tenpay_show.php"; //返回URL ?>2:md5_request.php 程序代码:<?php//include("tenpay_util.php");class tenpay_online_payment{//检查并组合支付参数串function AddParameter($buffer,$parameterName,$parameterValu e){if ($parameterValue=="")return $buffer;if (empty($buffer))$buffer = $parameterName . "=". $parameterValue;else$buffer = $buffer . "&" . $parameterName . "=" .$parameterValue;return $buffer;}//产生支付链接function tenpay_interface_pay ($mch_name,$mch_price,$transport_desc,$transport_f ee,$mch_desc,$mch_vno){include_once("tenpay_config.php");if (empty($mch_price)){$retcode = "09001";$retmsg = "缺少mch_price";}if ($transport_desc==""){$retcode = "06002";$retmsg = "缺少transport_desc,将被默认设置不需要物流***"; $transport_desc = "无物流***";}if ($transport_fee==""){if (retcode == "06002"){$transport_fee = "0";}else{$retcode = "09002";$retmsg = "缺少transport_fee,将被默认设置不需要物流***"; }}if (empty($mch_desc)){$retcode = "06003";$retmsg = "缺少交易描述***,将被默认设置为网站地址加交易购物"; $mch_desc = $domain . "交易购物";}if (empty($mch_vno)){$retcode = "09003";$retmsg = "缺少商家订单号";}if (empty($mch_name)){$retcode = "06005";$retmsg = "缺少商品名称,将被默认设置为网站地址加订单号"; $mch_name = $site_name."订单:" . $mch_vno;}if (empty($mch_returl)){$retcode = "06006";$retmsg = "缺少回调url,将被默认设置为/tenpay/notify_handler.php"; $mch_returl = $domain . $tenpay_dir ."/tenpay_notify.php";}if (empty($show_url)){$retcode = "06007";$retmsg = "缺少回显url,将被默认设置为/tenpay/tenpay_show.php"; $show_url = $domain . $tenpay_dir ."/tenpay_show.php";}//判断测试开关,如果开启测试,支付金额为1分if ($beta_switch == "1"){echo "enter beta_switch";$mch_price = "1";$transport_fee = "0";$buffer = $this->AddParameter($buffer, "attach", $attach);$buffer = $this->AddParameter($buffer, "chnid", $chnid);$buffer = $this->AddParameter($buffer, "cmdno", "12");$buffer = $this->AddParameter($buffer, "encode_type", $encode_type); $buffer = $this->AddParameter($buffer, "mch_desc", $mch_desc); $buffer = $this->AddParameter($buffer, "mch_name", $mch_name); $buffer = $this->AddParameter($buffer, "mch_price", $mch_price); $buffer = $this->AddParameter($buffer, "mch_returl", $mch_returl); $buffer = $this->AddParameter($buffer, "mch_type", $mch_type);$buffer = $this->AddParameter($buffer, "need_buyerinfo", $need_buyerinfo); $buffer = $this->AddParameter($buffer, "seller", $seller);$buffer = $this->AddParameter($buffer, "show_url", $how_url);$buffer = $this->AddParameter($buffer, "transport_desc", $transport_desc); $buffer = $this->AddParameter($buffer, "transport_fee", $transport_fee); $buffer = $this->AddParameter($buffer, "version", $version);$md5_sign =strtoupper(md5($buffer."&key=".$sp_key));$redurl = $pay_url . "?".$buffer . "&sign=" . $md5_sign;echo $retcode . "<br></br>".$retmsg."<br></br>";echo $redurl;return $redurl;}else{if ($retcode < "09000"){$buffer = $this->AddParameter($buffer, "attach", $attach);$buffer = $this->AddParameter($buffer, "chnid", $chnid);$buffer = $this->AddParameter($buffer, "cmdno", "12");$buffer = $this->AddParameter($buffer, "encode_type", $encode_type); $buffer = $this->AddParameter($buffer, "mch_desc", $mch_desc);$buffer = $this->AddParameter($buffer, "mch_price", $mch_price);$buffer = $this->AddParameter($buffer, "mch_returl", $mch_returl); $buffer = $this->AddParameter($buffer, "mch_type", $mch_type);$buffer = $this->AddParameter($buffer, "mch_vno", $mch_vno);$buffer = $this->AddParameter($buffer, "need_buyerinfo", $need_buyerinfo); $buffer = $this->AddParameter($buffer, "seller", $seller);$buffer = $this->AddParameter($buffer, "show_url", $show_url);$buffer = $this->AddParameter($buffer, "transport_desc", $transport_desc); $buffer = $this->AddParameter($buffer, "transport_fee", $transport_fee); $buffer = $this->AddParameter($buffer, "version", $version);$md5_sign = strtoupper(md5($buffer."&key=".$sp_key));$redurl = $pay_url . "?".$buffer . "&sign=" . $md5_sign;return $redurl;}}}}?>3:tenpay_show.php 程序代码:<?include_once("tenpay_config.php");require_once("md5_request.php"); $tenpay = new tenpay_online_payment; import_request_variables("gpc", "frm_"); $cmdno = $frm_cmdno;$version = $frm_version;$retcode = $frm_retcode;$status = $frm_status;$seller = $frm_seller;$total_fee = $frm_total_fee;$trade_price = $frm_trade_price; $transport_fee = $frm_transport_fee; $buyer_id = $frm_buyer_id;$chnid = $frm_chnid;$cft_tid = $frm_cft_tid;$smch_vno = $frm_mch_vno;$attach = $frm_attach;$version = $frm_version;$sign = $frm_sign;$iRetOK = 0; // 成功$iInvalidSpid = 1; // 商户号错误$iInvalidSign = 2; // 签名错误$iTenpayErr = 3; // 财付通返往返支付失败$buffer = $tenpay->AddParameter($buffer, "attach", $attach);$buffer = $tenpay->AddParameter($buffer, "buyer_id", $buyer_id);$buffer = $tenpay->AddParameter($buffer, "cft_tid", $cft_tid);$buffer = $tenpay->AddParameter($buffer, "chnid", $chnid);$buffer = $tenpay->AddParameter($buffer, "cmdno", $cmdno);$buffer = $tenpay->AddParameter($buffer, "mch_vno", $mch_vno);$buffer = $tenpay->AddParameter($buffer, "retcode", $retcode);$buffer = $tenpay->AddParameter($buffer, "seller", $seller);$buffer = $tenpay->AddParameter($buffer, "status", $status);$buffer = $tenpay->AddParameter($buffer, "total_fee", $total_fee);$buffer = $tenpay->AddParameter($buffer, "trade_price", $trade_price);$buffer = $tenpay->AddParameter($buffer, "transport_fee", $transport_fee);$buffer = $tenpay->AddParameter($buffer, "version", $version);$strLocalSign = strtoupper(md5($buffer."&key=".$sp_key));if ($strLocalSign == $sign ){//验证MD5签名成功if ($retcode == "0"){//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分//echo "<meta name=\"TENCENT_ONLINE_PAYMENT\" content=\"China TENCENT\">"; if($status=="3"){//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分echo "支付成功";}else{//支付失败,请根据retcode进行错误逻辑处理}}}else{//签名失败,请进行非法操作的逻辑处理}?>4:tenpay_notify.php 程序代码:<?include_once("tenpay_config.php");require_once("md5_request.php");$tenpay = new tenpay_online_payment;import_request_variables("gpc", "frm_");$cmdno = $frm_cmdno;$retcode = $frm_retcode;$status = $frm_status;$seller = $frm_seller;$total_fee = $frm_total_fee;$trade_price = $frm_trade_price;$transport_fee = $frm_transport_fee;$buyer_id = $frm_buyer_id;$chnid = $frm_chnid;$cft_tid = $frm_cft_tid;$mch_vno = $frm_mch_vno;$attach = $frm_attach;$version = $frm_version;$sign = $frm_sign; $iRetOK = 0; // 成功$iInvalidSpid = 1; // 商户号错误$iInvalidSign = 2; // 签名错误$iTenpayErr = 3; // 财付通返往返支付失败$buffer = $tenpay->AddParameter($buffer, "attach", $attach); $buffer = $tenpay->AddParameter($buffer, "buyer_id", $buyer_id); $buffer = $tenpay->AddParameter($buffer, "cft_tid", $cft_tid); $buffer = $tenpay->AddParameter($buffer, "chnid", $chnid); $buffer = $tenpay->AddParameter($buffer, "cmdno", $cmdno); $buffer = $tenpay->AddParameter($buffer, "mch_vno", $mch_vno);$buffer = $tenpay->AddParameter($buffer, "retcode", $retcode);$buffer = $tenpay->AddParameter($buffer, "seller", $seller);$buffer = $tenpay->AddParameter($buffer, "status", $status);$buffer = $tenpay->AddParameter($buffer, "total_fee", $total_fee);$buffer = $tenpay->AddParameter($buffer, "trade_price", $trade_price);$buffer = $tenpay->AddParameter($buffer, "transport_fee", $transport_fee);$buffer = $tenpay->AddParameter($buffer, "version", $version);$strLocalSign = strtoupper(md5($buffer."&key=".$sp_key));if ($strLocalSign == $sign ){//验证MD5签名成功if ($retcode == "0"){//支付成功,在这里处理业务逻辑注意判断订单是否重复的逻辑,注意订单金额为分echo "<meta name=\"TENCENT_ONLINE_PAYMENT\" content=\"China TENCENT\">"; echo $status;switch(($status)) {case 1://交易创建break;case 2://收获地址填写完毕case 3://买家付款成功,注意判断订单是否重复的逻辑echo "test pay success";break;case 4://卖家发货成功break;case 5://买家收货确认,交易成功break;case 6://交易关闭,未完成超时关闭break;case 7://修改交易***成功break;case 8://买家发起退款break;case 9://退款成功case 10://退款关闭break;default://error}}else{//支付失败,请根据retcode入行错误逻辑处理echo "retcode";}}else{echo "qianming";//签名失败,请进行非法操作的逻辑处理}?>5:index.php 程序代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitiona l.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><?//require_once("md5_request.php");$tenpay = new tenpay_online_payment;$url = $tenpay->tenpay_interface_pay ("0023_09050711031337","1213","","","财付通中介保护交易","021453587");// 0023_09050711031337:是商品的订单号,也可以是名字,1213:是***(财付通***是乘以100计算,比如说你的***是120,那么连接的财付通这里的时候,你需要120*100才正确)print_r("<a href=\"".$url."\" target=\"_blank\"><img src=\"./images/blue_logo.jpg\" alt=\"用财付通支付\" border=\"0\"></a>");?><body></body></html>只要你的财付通账号和密码是正确的,那么上面的程序复制下来就可以直接用,还要注意财付通账号一定要是担保交易的账户,直接交易账户不是这个程序配置正确后点击担保交易跳到财付通页面(下图)。
通用即时到帐接口集成教程_PHP版本
<通用即时到帐接口集成教程——PHP版本>修订记录版权信息本手册中所有的信息都是支付宝公司的财产并且受到严格的保密。
未经过支付宝公司书面同意,接收本手册的人不能复制,公开,泄露手册的部分或全部的内容。
目录修订记录 (2)目录 (3)1 介绍 (4)1.1 类型 (4)1.2 适用人群 (4)1.3 文件说明 (4)2 准备工作 (5)2.1 确认工作 (5)2.1.1 确认商家网站的基本信息 (5)2.1.2 确认拿到的接口资料 (5)2.2 准备工作 (5)2.2.1 准备调试环境 (5)2.2.2 找到接入文件 (6)2.2.3 定位要传递的关键信息 (6)3 接入 (6)3.1 配置部分 (6)3.2 请求部分 (7)3.3 通知、返回部分 (8)4 调试 (8)4.1 步骤 (8)4.2 支付 (9)4.3 返回 (9)4.4 通知 (10)4.5 sign与mysign、veryfy_result的调试 (10)4.5.1 preg_match("/true$/i",$veryfy_result)不是true的情况 (10)4.5.2 sign与mysign不等的情况 (11)5 常见问题FAQ (11)1 介绍1.1 类型接口类型:通用即时到帐接口开发语言:php编码格式:适用GBK(GB2312)、UTF-8两种编码。
1.2 适用人群本教程文档是面向了解PHP语言或其他语言等具有一定程序编写能力的技术人员的接口集成说明文档。
1.3 文件说明文件包含以下几个文件。
1、index.php:(快速付款)入口文件用于在不涉及到购物车流程、充值流程等业务流程时,只需要实现买家能够快速付款给卖家的付款功能。
2、alipayto.php:(确认订单)入口文件用来连接商户网站和支付宝收银台的主页面,把商户网站的商品名称,订单号,以及其它的一些参数按照支付宝指定的规则传递给支付宝,通过form 表单POST或URL GET方式提交到支付宝。
手机网站支付接口(alipay.wap.create.direct.pay.by.user)
版本号:1.0
支付宝(中国)网络技术有限公司 版权所有
手机网站支付接口
目录
1 文档说明 .............................................................................................................. 4
对获取的返回结果数据进行处理商户在同步通知处理页面参数returnurl指定页面文件或服务器异步通知页面参数notifyurl指定页面文件获取支付宝返回的结果数据后可以结合自身网站的业务逻辑进行数据处理如
手机网站支付接口
服务名称: er
7 通知返回数据处理.............................................................................................. 19
php微信支付宝支付面试题(3篇)
第1篇第一部分:基础知识1. 微信支付和支付宝支付的基本概念- 请简述微信支付和支付宝支付的基本工作原理。
- 微信支付和支付宝支付在用户流程上有哪些区别?2. PHP在支付系统中的作用- PHP在支付系统中主要承担哪些角色?- 请说明PHP在处理支付请求时需要考虑哪些安全性问题。
3. API对接- 什么是API?在支付系统中,API对接有哪些步骤?- 请描述如何使用PHP调用支付宝或微信支付的API。
4. 支付流程- 请详细描述微信支付或支付宝支付的一个完整流程,包括用户发起支付、支付平台处理、支付结果通知等环节。
5. 支付参数- 在支付过程中,常见的支付参数有哪些?请举例说明。
- 如何确保支付参数的正确性和安全性?第二部分:技术实现6. 选择支付平台- 如何选择合适的支付平台?- 在选择支付平台时,需要考虑哪些因素?7. 注册开发者账号- 请描述如何注册支付宝或微信支付的开发者账号。
- 开发者账号注册后,需要获取哪些信息?8. API文档和密钥- 什么是API文档?为什么它对支付系统开发至关重要? - 请说明如何获取和使用API文档中的密钥。
9. 编写Pay函数- 请描述如何编写一个Pay函数来实现支付请求。
- 在Pay函数中,需要构造哪些支付参数?10. 支付状态查询- 请说明如何查询支付状态。
- 常见的支付状态有哪些?11. 退款处理- 请描述如何处理退款请求。
- 退款处理需要注意哪些问题?12. 回调处理- 什么是支付回调?- 请说明如何处理支付回调。
第三部分:安全性与优化13. 支付金额验证- 请描述如何验证支付金额的正确性和合法性。
- 在PHP中,可以使用哪些方法进行金额验证?14. 防止SQL注入- 什么是SQL注入攻击?- 在支付系统中,如何防止SQL注入攻击?15. 支付请求加密- 请说明支付请求加密的必要性。
- 在PHP中,如何实现支付请求的加密?16. 性能优化- 请描述如何优化支付系统的性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
php版支付宝接口源代码首先在使用支付宝支付的时候,必须先注册一个支付宝的账户,然后再下载支付宝提供的接口文件,通过支付宝提供的接口文件,实现电子商务与支付宝的交互。
在支付宝提供的接口文件中,提供了完整的实例程序,只要依照实例程序中的操作方法,将电子商务网站中指定的数据提交到支付宝提供的数组参数中,然后支付宝通过自己的定义的方法将数据提交到指定的网站中。
实现代码如下,具体见代码注释:<?phprequire_once("alipay_service.php");require_once("alipay_config.php");$array=explode("@",$info["spc"]);$arraynum=explode("@",$info["slc"]);$arrayinfo=array(); //创建数组$arrayinfo_count=array(); //创建数组for($i=0;$i<count($array);$i++){if($array[$i]!=""){$m=$i+1;$sqlcart=mysql_query("select * from tb_commodity wheretb_commodity_id='".$array[$i]."'",$conn);$infocart=mysql_fetch_array($sqlcart); //读取数据库中数据array_push($arrayinfo,$infocart[tb_commodity_name]); //将购物商品的名称写入到数组中array_push($arrayinfo_count,"商品$m :$infocart[tb_commodity_name] 数量:$arraynum[$i]"); //将购物商品的数量写入到数组中}}$commodity_name=implode(',',$arrayinfo); //获取商品名称$commodity_count=implode(',',$arrayinfo_count); //获取商品描述信息$parameter = array("service" => "trade_create_by_buyer", //交易类型,必填实物交易=trade_create_by_buyer(需要填写物流)"partner" =>$partner, //合作商户号"return_url" =>$return_url, //同步返回"notify_url" =>$notify_url, //异步返回"_input_charset" => $_input_charset, //字符集,默认为GBK"subject" => $commodity_name, //商品名称,必填"body" => $commodity_count, //商品描述,必填"out_trade_no" => $ddnumber, //商品外部交易号,订单号,必填,每次测试都须修改"logistics_fee"=>$yprice, //物流配送费用"logistics_payment"=>'BUYER_PAY', //物流配送费用付款方式:BUYER_PAY(买家支付)"logistics_type"=>'EXPRESS', // 物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)"price" => $amount, //商品单价,必填"payment_type"=>"1", // 默认为1,不需要修改"quantity" => "1", //商品数量,必填"show_url" => $show_url, //商品相关网站"seller_email" => $seller_email //卖家邮箱,必填);$alipay = new alipay_service($parameter,$security_code,$sign_type);$link=$alipay->create_url();$smarty->assign("link",$link);?><?phprequire_once("alipay_service.php");require_once("alipay_config.php");$array=explode("@",$info["spc"]);$arraynum=explode("@",$info["slc"]);$arrayinfo=array(); //创建数组$arrayinfo_count=array(); //创建数组for($i=0;$i<count($array);$i++){if($array[$i]!=""){$m=$i+1;$sqlcart=mysql_query("select * from tb_commodity wheretb_commodity_id='".$array[$i]."'",$conn);$infocart=mysql_fetch_array($sqlcart); //读取数据库中数据array_push($arrayinfo,$infocart[tb_commodity_name]); //将购物商品的名称写入到数组中array_push($arrayinfo_count,"商品$m :$infocart[tb_commodity_name] 数量:$arraynum[$i]"); //将购物商品的数量写入到数组中}}$commodity_name=implode(',',$arrayinfo); //获取商品名称$commodity_count=implode(',',$arrayinfo_count); //获取商品描述信息$parameter = array("service" => "trade_create_by_buyer", //交易类型,必填实物交易=trade_create_by_buyer(需要填写物流)"partner" =>$partner, //合作商户号"return_url" =>$return_url, //同步返回"notify_url" =>$notify_url, //异步返回"_input_charset" => $_input_charset, //字符集,默认为GBK "subject" => $commodity_name, //商品名称,必填"body" => $commodity_count, //商品描述,必填"out_trade_no" => $ddnumber, //商品外部交易号,订单号,必填,每次测试都须修改"logistics_fee"=>$yprice, //物流配送费用"logistics_payment"=>'BUYER_PAY', //物流配送费用付款方式:BUYER_PAY(买家支付)"logistics_type"=>'EXPRESS', // 物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)"price" => $amount, //商品单价,必填"payment_type"=>"1", // 默认为1,不需要修改"quantity" => "1", //商品数量,必填"show_url" => $show_url, //商品相关网站"seller_email" => $seller_email //卖家邮箱,必填);$alipay = new alipay_service($parameter,$security_code,$sign_type); $link=$alipay->create_url();$smarty->assign("link",$link);?><?phprequire_once("alipay_service.php");require_once("alipay_config.php");$array=explode("@",$info["spc"]);$arraynum=explode("@",$info["slc"]);$arrayinfo=array(); //创建数组$arrayinfo_count=array(); //创建数组for($i=0;$i<count($array);$i++){if($array[$i]!=""){$m=$i+1;$sqlcart=mysql_query("select * from tb_commodity wheretb_commodity_id='".$array[$i]."'",$conn);$infocart=mysql_fetch_array($sqlcart); //读取数据库中数据array_push($arrayinfo,$infocart[tb_commodity_name]); //将购物商品的名称写入到数组中array_push($arrayinfo_count,"商品$m :$infocart[tb_commodity_name] 数量:$arraynum[$i]"); //将购物商品的数量写入到数组中}}$commodity_name=implode(',',$arrayinfo); //获取商品名称$commodity_count=implode(',',$arrayinfo_count); //获取商品描述信息$parameter = array("service" => "trade_create_by_buyer", //交易类型,必填实物交易=trade_create_by_buyer(需要填写物流)"partner" =>$partner, //合作商户号"return_url" =>$return_url, //同步返回"notify_url" =>$notify_url, //异步返回"_input_charset" => $_input_charset, //字符集,默认为GBK "subject" => $commodity_name, //商品名称,必填"body" => $commodity_count, //商品描述,必填"out_trade_no" => $ddnumber, //商品外部交易号,订单号,必填,每次测试都须修改"logistics_fee"=>$yprice, //物流配送费用"logistics_payment"=>'BUYER_PAY', //物流配送费用付款方式:BUYER_PAY(买家支付)"logistics_type"=>'EXPRESS', // 物流配送方式:POST(平邮)、EMS(EMS)、EXPRESS(其他快递)"price" => $amount, //商品单价,必填"payment_type"=>"1", // 默认为1,不需要修改"quantity" => "1", //商品数量,必填"show_url" => $show_url, //商品相关网站"seller_email" => $seller_email //卖家邮箱,必填);$alipay = new alipay_service($parameter,$security_code,$sign_type); $link=$alipay->create_url();$smarty->assign("link",$link);?>这里介绍的知识通过php来实现电子商务网站与支付宝进行交互的方法。