支付宝 沙箱appid手机网站支付有没有测试appid

主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:
开户咨询:Q*Q怎么申请支付宝即时到账接口,支付宝手机网页即时到账接口扫码接口申请+出售 ??现?在?提供?只需?您?提供?您?的?个人?支付?宝,?我们?用?企业?实?名?认证?的?支付?宝?商?户号?帮??您个人?进行?关?联?让?您?的?支?付?宝?拥有?即时?到?帐?功?能?收?款?到?您?的?个?人?账?户?,?资?金?又?您?操?作?无?需?第?三?方?怎么实现我的网站后台用普通支付宝收款?(达到商户ID即时到帐)支付宝,即时到账,在线支付支付宝即时到账收款和淘宝担保交易不一样,网上支付后,买的买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金。交易步骤少,简单、方便;交易资金三个月内可退款…商城网站支付接口开发对于绝大赚、电商类事业的站长来说,在线收款都是件令人头疼的事! 因为个人(个体户)无法申请到支付宝即时到账接口,只能使用担保交易或双接口,或者就是第三方网银接口,导致资金回笼慢、退款频发,还容易被某些居心不良者钻空子。。。而事实上大部分DZ站长都没有企业支付宝,也不太愿意为了使用“支付宝即时到账”去审批个手续繁琐还要缴税的公司对吧? 那么如果我告诉你,个人支付宝也能实现和企业支付宝一样的即时到账收款的功能,且无需签约、无年费、永久使用,会不会很爽呢? 专业量身定制设计、定制功能、定制后台开发 拥有资深开发团队,追求质量同时保证速度 追求完美,不断提升系统响应速度和稳定性 完善的测试流程,在上线之前解决问题呕心之作:支付宝的手机网站支付接口的应用
时间: 14:51:36
&&&& 阅读:327
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&由于去年做手机Portl接口的工作,需要使用支付宝的支付,于是手机网站支付接口就成了首选。
1.首先下载接口包
 支付宝商家服务中心链接:
  手机网站支付的产品介绍:
  demo下载链接:&&&(请点击关键字demo,进行下载)
  解压下载的文件可以看到文件夹的结构如下图:
  我使用的是RSA签名方式,PHP-UTF-8的文件夹
2.readme.txt的文档说明
  红色字体的文件是最重要的文件,也是必需的!
│├lib┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈类文件夹│
├alipay_core.function.php ┈┈┈┈┈┈支付宝接口公用函数文件│
├alipay_notify.class.php┈┈┈┈┈┈┈支付宝通知处理类文件│
├alipay_submit.class.php┈┈┈┈┈┈┈支付宝各接口请求提交类文件│
└alipay_rsa.function.php┈┈┈┈┈┈┈支付宝接口RSA函数文件│├log.txt┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈日志文件│├alipay.config.php┈┈┈┈┈┈┈┈┈┈┈┈基础配置类文件│├alipayapi.php┈┈┈┈┈┈┈┈┈┈┈┈┈┈支付宝接口入口文件│├notify_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈服务器异步通知页面文件│├return_url.php ┈┈┈┈┈┈┈┈┈┈┈┈┈页面跳转同步通知文件│├key┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈私钥公钥文件夹(用法见下方※注意※)│
├rsa_private_key.pem┈┈┈┈┈┈┈┈┈商户的私钥文件│
└alipay_public_key.pem┈┈┈┈┈┈┈┈支付宝的公钥文件│├openssl┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈缺省dll文件(用法见下方※注意※)│
├libeay32.dll│
├ssleay32.dll│
└php_openssl.dll│├cacert.pem ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈用于CURL中校验SSL的CA证书文件│└readme.txt ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈使用说明文本3. 把必需的文件整合到框架里(我当时用的是thinkPHP框架)  (1)在
里新建一个文件夹叫AliMobilePay,      
     把上图里的4个文件拷贝到AliMobilePay文件夹里,
      对以上文件进行重命名,
      alipay_core.function.php重命名为:Corefunction.php
      alipay_notify.class.php重命名为:Notify.php
      alipay_rsa.function.php重命名为:Rsafunction.php
      alipay_submit.class.php重命名为:Submit.php
      打开Notify.php,去掉一下代码,
      require_once("alipay_core.function.php");      require_once("alipay_rsa.function.php");
      同样的道理去掉其他3个文件里的包含文件。
  (2)在根目录下建立一个文件夹key     在key文件夹里放入商户的私钥文件、支付宝的公钥文件、CA证书文件
        
       如何生成RSA密钥:& (此文中描述的rsa_private_key.pem就是商家的私钥文件)
         
      ◆商户的私钥      1、不需要对刚生成的(原始的)私钥做pkcs8编码      2、不需要去掉去掉“-----BEGIN RSA PRIVATE KEY-----”、“-----END RSA PRIVATE KEY-----”      简言之,只要维持用openssl工具刚生成出来的私钥的内容即可。
      
      ◆支付宝公钥      1、须保留“-----BEGIN PUBLIC KEY-----”、“-----END PUBLIC KEY-----”这两条文字。      简言之,支付宝公钥只需要维持demo里的原样即可。
      
   (3)alipay_config.php 配置文件
     &把alipay_config.php 配置文件整合到thinkPHP框架的配置文件里
      
* Created by PhpStorm.
* User: zhangxiaoliu
* Date: 16/4/15
* Time: 上午10:39
//支付宝商家服务中心链接:/login.htm?goto=:443/newIndex.htm
return array(
‘ALIMOBILEPAY_CONFIG‘=&array(
//合作身份者id,以2088开头的16位纯数字, (合作身份者id的查看链接:/order/pidAndKey.htm)
‘partner‘ =& ‘2088XXXXXXXXXXXX‘,
//收款支付宝账号,与partner的值一样
‘seller_id‘ =& ‘2088XXXXXXXXXXXX‘,
//商户的私钥(后缀是.pem)文件相对路径
‘private_key_path‘=& NEW_PORTAL_DOMAIN.‘key/rsa_private_key.pem‘,
//支付宝公钥(后缀是.pem)文件相对路径
‘ali_public_key_path‘=& NEW_PORTAL_DOMAIN.‘key/alipay_public_key.pem‘,
//签名方式 不需修改
‘sign_type‘ =& strtoupper(‘RSA‘),
//字符编码格式 目前支持 gbk 或 utf-8
‘input_charset‘=& ‘utf-8‘,
//ca证书路径地址,用于curl中ssl校验
‘cacert‘ =& NEW_PORTAL_DOMAIN.‘key/cacert.pem‘,
//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http
‘transport‘ =& ‘http‘,
//这里是异步通知页面url,提交到项目的Payment控制器的notifyurl方法;
//需http://格式的完整路径,不能加?id=123这类自定义参数
‘notify_url‘=& NEW_PORTAL_DOMAIN.‘portal.php/AliMobilePay/notify_url.php‘,
//这里是页面跳转通知url,提交到项目的Payment控制器的returnurl方法;
//需http://格式的完整路径,不能加?id=123这类自定义参数
‘return_url‘=& NEW_PORTAL_DOMAIN.‘portal.php/AliMobilePay/return_url.php‘,
//支付成功跳转到的页面
‘successpage‘=&NEW_PORTAL_DOMAIN.‘portal.php/Success/index‘,
//支付失败跳转到的页面
‘errorpage‘=&NEW_PORTAL_DOMAIN.‘portal.php/Error/index‘,
//商品展示地址
‘product_url‘=&NEW_PORTAL_DOMAIN.‘portal.php/Product/index‘,
    (4)支付宝帮助中心
      
4.调用支付宝接口
    (1)新建一个AliMobilePay控制器
namespace&Portal\C
use&Common\Component\FilterC
use&Portal\Service\LogPaycallbacksS
use&Portal\Service\GuozhanOrderS
use&Portal\Model\Pengwifi\Guozhan\OrderM
use&Portal\Service\TokenS
use&Portal\Service\UserS
use&Portal\Service\SetMotoRadiusS
use&Common\Model\Radius\RadcheckM
class&AliMobilePayController&extends&CommonController{
&&&&protected&$_order_model=
&&&&protected&$_order_service=
&&&&protected&$_token_service&=
&&&&protected&$_Set_MotoRadius_service=
&&&&protected&$_RadcheckModel=
&&&&protected&$_log_pay_callbacks&=
&&&&protected&function&afterInit() {
&&&&&&&&parent::afterInit();
&&&&&&&&vendor(‘AliMobilePay.Corefunction‘);
&&&&&&&&vendor(‘AliMobilePay.Rsafunction‘);
&&&&&&&&vendor(‘AliMobilePay.Notify‘);
&&&&&&&&vendor(‘AliMobilePay.Submit‘);
&&&&&&&&$this-&_order_model=&new&OrderModel();
&&&&&&&&$this-&_order_service=&new&GuozhanOrderService();
&&&&&&&&$this-&_log_pay_callbacks =&new&LogPaycallbacksService();
&&&&&&&&$this-&_service =&new&UserService();
&&&&&&&&$this-&_token_service =&new&TokenService();
&&&&&&&&$this-&_RadcheckModel =&new&RadcheckModel();
&&&&&&&&$this-&_Set_MotoRadius_service =&new&SetMotoRadiusService();
&&&&protected&function&_post(){
&&&&&&&&if(isset($this-&params[‘name‘]) && ($this-&params[‘name‘]=="notify_url")){
&&&&&&&&&&&&$this-&notify_url(‘notify_url‘);
&&&&&&&&&&&¨
&&&&&&&&$this-&insert_order();
&&&&protected&function&_get(){
&&&&&&&&$notify_url&= isset($this-&params[‘name‘]) ? FilterComponent::getString($this-&params[‘name‘]) :&‘Unknown‘;
&&&&&&&&switch($notify_url){
&&&&&&&&&&&&case&‘return_url‘:
&&&&&&&&&&&&&&&&$this-&return_url($notify_url);
&&&&&&&&&&&&&&&&break;
&&&&&&&&&&&&default:
&&&&&&&&&&&&&&&&$this-&_log_pay_callbacks-&update(array(‘request_from‘=&‘Unknown‘), false);
&&&&&&&&&&&&&&&&exit(‘Wrong request url‘);
&&&&private&function&notify_url($notify_url){
&&&&&&&&$alipay_config&= C(‘ALIMOBILEPAY_CONFIG‘);
&&&&&&&&$alipayNotify&=&new&\AlipayNotify($alipay_config);
&&&&&&&&$verify_result&=&$alipayNotify-&verifyNotify();
&&&&&&&&if($verify_result) {
&&&&&&&&&&&&
&&&&&&&&&&&&$order_sn&=&$this-&params[‘out_trade_no‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$trade_status&=&$this-&params[‘trade_status‘];
&&&&&&&&&&&&$this-&_log_pay_callbacks-&update(array(‘request_from‘=&$notify_url,&‘order_sn‘=&$order_sn,&‘response_status‘=&$trade_status), false);
&&&&&&&&&&&&if&(in_array($trade_status,array(‘TRADE_SUCCESS‘,‘TRADE_FINISHED‘))) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&if(!$this-&checkorderstatus($order_sn)){
&&&&&&&&&&&&&&&&&&&&&$result=$this-&orderhandle($order_sn);
&&&&&&&&&&&&&&&&&&&&&if($result==true){
&&&&&&&&&&&&&&&&&&&&&&&&&echo&"success";
&&&&&&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&&&&&&echo&"fail";
&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&echo&"fail";
&&&&&&&&&&&&}
&&&&&&&&}else&{
&&&&&&&&&&&&
&&&&&&&&&&&&echo&"fail";
&&&&private&function&return_url($notify_url){
&&&&&&&&$alipay_config=C(‘ALIMOBILEPAY_CONFIG‘);
&&&&&&&&$alipayNotify&=&new&\AlipayNotify($alipay_config);
&&&&&&&&$verify_result&=&$alipayNotify-&verifyReturn();
&&&&&&&&if($verify_result) {
&&&&&&&&&&&&
&&&&&&&&&&&&$order_sn&=&$this-&params[‘out_trade_no‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$trade_status&=&$this-&params[‘trade_status‘];
&&&&&&&&&&&&$this-&_log_pay_callbacks-&update(array(‘request_from‘=&$notify_url,&‘order_sn‘=&$order_sn,&‘response_status‘=&$trade_status), false);
&&&&&&&&&&&&if&(in_array($trade_status,array(‘TRADE_SUCCESS‘,‘TRADE_FINISHED‘))) {
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&if(!$this-&checkorderstatus($order_sn)){
&&&&&&&&&&&&&&&&&&&&$result=$this-&orderhandle($order_sn);
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&if($result==true){
&&&&&&&&&&&&&&&&&&&&&&&&header("Location:".C(‘ALIMOBILEPAY_CONFIG.successpage‘));
&&&&&&&&&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&&&&&&&&&header("Location:".C(‘ALIMOBILEPAY_CONFIG.errorpage‘));
&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}else&{
&&&&&&&&&&&&&&&&header("Location:".C(‘ALIMOBILEPAY_CONFIG.errorpage‘));
&&&&&&&&&&&&}
&&&&&&&&}else&{
&&&&&&&&&&&&
&&&&&&&&&&&&header("Location:".C(‘ALIMOBILEPAY_CONFIG.product_url‘));
&&&&private&function&checkorderstatus($order_sn){
&&&&&&&&$status=$this-&_order_model-&where("order_sn=‘$order_sn‘")-&getField(‘order_status‘);
&&&&&&&&if($status&== OrderModel::ORDER_STATUS_PAYED){
&&&&&&&&&&&&return&
&&&&&&&&}else{
&&&&&&&&&&&&return&
&&&&private&function&orderhandle($order_sn){
&&&&&&&&try{
&&&&&&&&&&&&
&&&&&&&&&&&&$this-&_order_model-&startTrans();
&&&&&&&&&&&&$data[‘order_status‘]=OrderModel::ORDER_STATUS_PAYED;
&&&&&&&&&&&&$affected_row=$this-&_order_model-&where("order_sn=‘$order_sn‘")-&save($data);
&&&&&&&&&&&&$find=$this-&_order_model-&where("order_sn=‘$order_sn‘")-&field(‘location_id,goods_id,mobile,goods_number‘)-&find();
&&&&&&&&&&&&
&&&&&&&&&&&&$goods_model=M(‘goods‘);
&&&&&&&&&&&&$card_model=M(‘card‘);
&&&&&&&&&&&&$card_name=$goods_model-&where("id={$find[‘goods_id‘]}")-&getField(‘card_name‘);
&&&&&&&&&&&&$duration=$card_model-&where("location_id={$find[‘location_id‘]} and card_name=‘$card_name‘")-&order(‘id desc‘)-&getField(‘duration‘);
&&&&&&&&&&&&$incre_time=($find[‘goods_number‘]) *&$duration;
&&&&&&&&&&&&$user_model=M(‘user‘);
&&&&&&&&&&&&$mobile=$find[‘mobile‘];
&&&&&&&&&&&&$user_info=$user_model-&where("user_name=‘{$mobile}‘")-&field(‘id,end_time‘)-&find();
&&&&&&&&&&&&$affected_row2=$user_model-&where("user_name=‘{$mobile}‘")-&setInc(‘usable_time‘,$incre_time);
&&&&&&&&&&&&
&&&&&&&&&&&&if($user_info[‘end_time‘] &= time()){
&&&&&&&&&&&&&&&&$user_model-&where("user_name=‘{$mobile}‘")-&setInc(‘end_time‘,$incre_time);
&&&&&&&&&&&&}else{
&&&&&&&&&&&&&&&&$update_data[‘end_time‘]=time()+$incre_time;
&&&&&&&&&&&&&&&&$user_model-&where("user_name=‘{$mobile}‘")-&save($update_data);
&&&&&&&&&&&&}
&&&&&&&&&&&&if(empty($affected_row)){
&&&&&&&&&&&&&&&&$this-&_log_pay_callbacks-&setException(L(‘ERROR_FAILED_UPDATE_ORDER‘),&$this-&_log_pay_callbacks-&getException(‘code‘));
&&&&&&&&&&&&&&&&throw&new&\Exception();
&&&&&&&&&&&&}
&&&&&&&&&&&&if(empty($affected_row2)){
&&&&&&&&&&&&&&&&$this-&_log_pay_callbacks-&setException(L(‘ERROR_FAILED_UPDATE_USABLETIME‘),&$this-&_log_pay_callbacks-&getException(‘code‘));
&&&&&&&&&&&&&&&&throw&new&\Exception();
&&&&&&&&&&&&}
&&&&&&&&&&&&
&&&&&&&&&&&&if($affected_row&&&&$affected_row2) {
&&&&&&&&&&&&&&&&$this-&_order_model-&commit();
&&&&&&&&&&&&&&&&return&
&&&&&&&&&&&&}
&&&&&&&&}catch(\Exception&$e){
&&&&&&&&&&&&$this-&_order_model-&rollback();
&&&&&&&&&&&&return&
&&&&private&function&insert_order(){
&&&&&&&&$gw_id&= isset($this-&params[‘gw_id‘]) ? FilterComponent::get($this-&params[‘gw_id‘]) :&‘‘;
&&&&&&&&if&(empty($gw_id)) {
&&&&&&&&&&&&exit(‘400_EMPTY_GWID‘);
&&&&&&&&$router=M(‘router‘);
&&&&&&&&$location_id=$router-&where("gw_id=‘$gw_id‘")-&getField(‘supplier_location_id‘);
&&&&&&&&$goods_number&= isset($this-&params[‘goods_number‘]) ? FilterComponent::get($this-&params[‘goods_number‘],‘int‘) :&‘‘;
&&&&&&&&if&(empty($goods_number)) {
&&&&&&&&&&&&exit(‘400_EMPTY_GOODSNUMBER‘);
&&&&&&&&$mobile&= isset($this-&params[‘mobile‘]) ? FilterComponent::get($this-&params[‘mobile‘]) :&‘‘;
&&&&&&&&if&(!preg_match(‘/^1[0-9]{10}$/‘,$mobile)) {
&&&&&&&&&&&&exit(‘400_ERROR_MOBILE‘);
&&&&&&&&$user=M(‘user‘);
&&&&&&&&$user_name=$user-&where("user_name=‘$mobile‘")-&getField(‘user_name‘);
&&&&&&&&if(!$user_name){
&&&&&&&&&&&&exit(‘400_EMPTY_USERNAME‘);
&&&&&&&&$goods_id&= isset($this-&params[‘goods_id‘]) ? FilterComponent::get($this-&params[‘goods_id‘],‘int‘) :&‘‘;
&&&&&&&&if&(empty($goods_id)) {
&&&&&&&&&&&&exit(‘400_EMPTY_GOODSID‘);
&&&&&&&&$goods=M(‘goods‘);
&&&&&&&&$unit_price=$goods-&where("id=$goods_id")-&getField(‘unit_price‘);
&&&&&&&&$this-&params[‘WIDtotal_fee‘]=$unit_price&*&$goods_number;
&&&&&&&&$data[‘location_id‘]=$location_id;
&&&&&&&&$data[‘mobile‘]=$mobile;
&&&&&&&&$data[‘goods_id‘]=$goods_id;
&&&&&&&&$data[‘goods_type‘]=1;
&&&&&&&&$data[‘goods_number‘]=$goods_number;
&&&&&&&&$data[‘total_price‘]=$this-&params[‘WIDtotal_fee‘];
&&&&&&&&$data[‘pay_type‘]=OrderModel::PAY_TYPE_ALIPAY;
&&&&&&&&$insert_id=$this-&_order_service-&update($data,false);
&&&&&&&&if($insert_id){
&&&&&&&&&&&&$this-&params[‘WIDout_trade_no‘]=$this-&_order_model-&where("id=$insert_id")-&getField(‘order_sn‘);
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$payment_type&=&"1";
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$out_trade_no&=&$this-&params[‘WIDout_trade_no‘];
&&&&&&&&&&&&
&&&&&&&&&&&&$this-&params[‘WIDsubject‘]=‘pengwifi_card‘;
&&&&&&&&&&&&
&&&&&&&&&&&&$subject&=&$this-&params[‘WIDsubject‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$total_fee&=&$this-&params[‘WIDtotal_fee‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$this-&params[‘WIDshow_url‘]=$_SERVER[‘HTTP_REFERER‘];
&&&&&&&&&&&&
&&&&&&&&&&&&$show_url&=&$this-&params[‘WIDshow_url‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$body&=&$this-&params[‘WIDbody‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$it_b_pay&=&$this-&params[‘WIDit_b_pay‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$extern_token&=&$this-&params[‘WIDextern_token‘];
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&$parameter&=&array(
&&&&&&&&&&&&&&&&"service"&=&&"alipay.wap.create.direct.pay.by.user",
&&&&&&&&&&&&&&&&"partner"&=& trim(C(‘ALIMOBILEPAY_CONFIG.partner‘)),
&&&&&&&&&&&&&&&&"seller_id"&=& trim(C(‘ALIMOBILEPAY_CONFIG.seller_id‘)),
&&&&&&&&&&&&&&&&"payment_type"&&=&&$payment_type,
&&&&&&&&&&&&&&&&"notify_url"&&&&=& trim(C(‘ALIMOBILEPAY_CONFIG.notify_url‘)),
&&&&&&&&&&&&&&&&"return_url"&&&&=& trim(C(‘ALIMOBILEPAY_CONFIG.return_url‘)),
&&&&&&&&&&&&&&&&"out_trade_no"&&=&&$out_trade_no,
&&&&&&&&&&&&&&&&"subject"&&&=&&$subject,
&&&&&&&&&&&&&&&&"total_fee"&=&&$total_fee,
&&&&&&&&&&&&&&&&"show_url"&&=&&$show_url,
&&&&&&&&&&&&&&&&"body"&&=&&$body,
&&&&&&&&&&&&&&&&"it_b_pay"&&=&&$it_b_pay,
&&&&&&&&&&&&&&&&"extern_token"&&=&&$extern_token,
&&&&&&&&&&&&&&&&"_input_charset"&&&&=& trim(strtolower(C(‘input_charset‘)))
&&&&&&&&&&&&);
&&&&&&&&&&&&$alipay_config=C(‘ALIMOBILEPAY_CONFIG‘);
&&&&&&&&&&&&
&&&&&&&&&&&&$alipaySubmit&=&new&\AlipaySubmit($alipay_config);
&&&&&&&&&&&&
&&&&&&&&&&&&$html_text&=&$alipaySubmit-&buildRequestForm($parameter,"get",&"确认");
&&&&&&&&&&&&echo&$html_text;
&&&&&&&&}else{
&&&&&&&&&&&&echo&‘fail‘;
如果您阅读过此文章有所收获,请为我顶一个,如果文章中有错误的地方,欢迎指出。
相互学习,共同进步!标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!10:48 提问
支付宝手机网站支付partner错误,求大神,我核对了很多次和商户是一样的
我的网站集成支付宝支付,我的程序流程是这样的:用户选择商品后,进入支付界面,点击确认支付以后,程序会跳转到一个方法,进行初始化一个MAP,,然后进行sign的计算,程序我采用支付宝官方的手机网站支付的代码,然后拼接成HTML(实际上就是一个FORM表单),格式如下:,然后进行提交到支付宝测试的沙盒网关(我目前是测试,用本地的花生壳域名进行映射的),请求以后报,说是partner 有错误,但问题是这个 partner和我的商户是一致的,还是报这个错误,很费解,求大神帮忙分析分析
按赞数排序
一般这个错误是必填参数没填或参数格式错误(这里要注意大小写),还有你的key(支付宝交易安全检验码)好像没传,如果要公钥私钥的话检查公钥、私钥和配置的是否一致
一般这个错误是必填参数没填或参数格式错误(这里要注意大小写),还有你的key(支付宝交易安全检验码)好像没传,如果要公钥私钥的话检查公钥、私钥和配置的是否一致
这是我写的支付宝支付片段代码,可供参考。希望可帮到你
其他相关推荐记录支付宝手机网站(WAP)支付踩过的坑 - 简书
记录支付宝手机网站(WAP)支付踩过的坑
由于苹果审核机制变化,除了JSPatch等热修复的应用受到影响外,另个影响较大的就是非法集成第三方支付SDK(尤其支付宝)而审核被拒。但是由于你懂的的原因,不想走IAP(In App Pay),所以当然想到了支付宝 WAP 支付。完成 WAP 支付大概花了三天多时间,但是有大概一天时间是在等签约,所以为了让大家和自己有需要的话快速集成,特意做一个总结。涉及 iOS(OC)和JS(HTML5)以及PHP,下面进入正题。
吐槽支付宝开放平台
之前我一直觉得只有微信的开发平台网站比较容易搞混,(一个是微信开放平台,另个是微信公众平台),但是接触支付宝后,深深陷入各个跳转和新旧文档难以自拔(我记得之前没这么乱啊,我知道网站迭代更新向后兼容不易,但是能不能稍微克制一下??)先扔出个WAP支付开发文档的链接出来,大家最好直接输入链接,搜索引擎慎用。(你能明白花了很长时间研究文档最后发现是老版本的痛苦吗)
注册商家等都不说了,很简单
虽然之前已经签约过 APP 支付功能,但是做手机网站支付的话还得继续签约手机网站支付功能,注意 APPID 是不一样的。签约网址在这里,开始的时候我以为我们运营同事已经帮忙申请好,但是最后在调支付宝接口的时候老是报错ISV权限不足,经过检查才发现是没有签约手机网站支付,提交申请审核时间是一个工作日。所以大家记得提前申请。
签约成功后,由于支付宝使用 RSA 数据加密方式,非对称加密,所以在本机可以openssl生成应用私钥和应用公钥(统称密钥),应用私钥在自己的代码中加密数据的时候会用到,应用公钥配置到支付宝后台产生支付宝公钥进行数据解密。注意下图,配置手机网站支付的时候选择左边的平台开放密钥,然后找到对应的APPID产品进行公钥配置。我一开始失误配置成了下面的mapi网关产品密钥,导致报错验签失败。
接下来修改 OC代码调用支付宝SDK支付换成打开HTML网页,在网页里面完成支付功能。
注意后面的queryString,由于支付网页需要UID,考虑到方便快捷,没有选择用 WebViewJSBridge 进行数据交互,而是直接拼在链接后面。
// 阿里 wap 支付
- (void)wapPay {
ZKSafariViewController *vc = [ZKSafariViewController new];
NSString *oriUrl = @"...";
NSString *queryStr = [NSString stringWithFormat:@"?uid=%@&fee=%@", _loginUser.uid, _total_fee];
NSString *urlStr = [oriUrl stringByAppendingString:queryStr];
vc.url = urlS
[_applicationContext.navigationController pushViewController:vc animated:YES];
编写HTML页面,提交数据到PHP后端。(前端代码)
代码如下:
&form name="alipayment" id="alipayment" action='...AliPay/CreateWapPay' method=post&
// ... 一些 input 标签,提交到服务器
&script type="text/javascript"&
function GetDateNow() {
let totalFee = getQueryStringArgs().total_fee,
uid = getQueryStringArgs().
document.getElementById("uid").value =
document.getElementById("total_fee").value = totalF
GetDateNow();
document.forms['alipayment'].submit();
集成 支付宝 PHP SDK 详细步骤(后端代码)
将SDK拖入项目文件,配置config.php文件,如下
$config = array (
'app_id' =& "...",
//商户私钥,您的原始格式RSA私钥
'merchant_private_key' =& "...",
//异步通知地址
'notify_url' =& "http://工程公网访问地址/alipay.trade.wap.pay-PHP-UTF-8/notify_url.php",
//同步跳转
'return_url' =& "/alipay.trade.wap.pay-PHP-UTF-8/return_url.php",
//编码格式
'charset' =& "UTF-8",
//签名方式
'sign_type'=&"RSA",
//支付宝网关
'gatewayUrl' =& "/gateway.do",
//支付宝公钥,查看地址:/platform/keyManage.htm 对应APPID下的支付宝公钥。
'alipay_public_key' =& "...",
组装系统参数$sysParams(app_id, return_url, nofify_url, sign_type等),获取业务参数$apiParams(放在biz_content字段中)并将其加密如下
$enCryptContent = encrypt($apiParams['biz_content'], $this-&encryptKey);
$apiParams['biz_content'] = $enCryptC
将系统参数和业务参数组装在一起进行签名
$totalParams = array_merge($apiParams, $sysParams);
//待签名字符串
$preSignStr = $this-&getSignContent($totalParams);
$totalParams["sign"] = $this-&generateSign($totalParams, $this-&signType);
然后到了关键的地方,利用total_params拼接表单字符串,方法如下
* 建立请求,以表单HTML形式构造(默认)
* @param $para_temp 请求参数数组
* @return 提交表单HTML文本
protected function buildRequestForm($para_temp) {
$sHtml = "&form id='alipaysubmit' name='alipaysubmit' action='".$this-&gatewayUrl."?charset=".trim($this-&postCharset)."' method='POST'&";
while (list ($key, $val) = each ($para_temp)) {
if (false === $this-&checkEmpty($val)) {
//$val = $this-&characet($val, $this-&postCharset);
$val = str_replace("'","'",$val);
//$val = str_replace("\"",""",$val);
$sHtml.= "&input type='hidden' name='".$key."' value='".$val."'/&";
//submit按钮控件请不要含有name属性
$sHtml = $sHtml."&input type='submit' value='ok' style='display:''&&/form&";
$sHtml = $sHtml."&script&document.forms['alipaysubmit'].submit();&/script&";
return $sH
执行第4步生成的表单html代码被类AlipayTradeService进行echo到前端页面上,包含JS自动提交脚本,所以就直接调起了支付宝支付。为了让大家更加明白,生成的h5代码形式如下:&form id='alipaysubmit' name='alipaysubmit' action='/gateway.do?charset=UTF-8' method='POST'&
&input type='hidden' name='biz_content' value='{"productCode":"QUICK_WAP_PAY","body":null,"subject":null,"out_trade_no":"1234","total_amount":"100","timeout_express":"1m"}'/&
&input type='hidden' name='app_id' value='8894'/&
&input type='hidden' name='version' value='1.0'/&
&input type='hidden' name='format' value='json'/&
&input type='hidden' name='sign_type' value='RSA'/&
&input type='hidden' name='method' value='alipay.trade.wap.pay'/&
&input type='hidden' name='timestamp' value=' 17:16:15'/&
&input type='hidden' name='alipay_sdk' value='alipay-sdk-php-'/&
&input type='hidden' name='notify_url' value='http://.../notify_url.php'/&
&input type='hidden' name='return_url' value='http://.../return_url'/&
&input type='hidden' name='charset' value='UTF-8'/&
&input type='hidden' name='sign' value='vgU9ROZeES3fa6CPo5onwY2auGN7N6naNI8Wo5l2U/K6LPk2stkv0Cor5Dn57Xo83GefOnoPg5A/7dNLbZjTXioPaocrPg3LteDB/EV3zYHXUPsab7dPztW+7guQDbLXI1RtaEuPm85hjO2Cur5EmP3P3sAE1XVGYJHHtLJoAbKzm/I='/&
&input type='submit' value='ok' style='display:''&
&script&document.forms['alipaysubmit'].submit();&/script&"
当上面的H5代码被echo到前端页面,会自动submit表单信息。继续往下看
在 iOS 中实现代理进行跳转(iOS 移动端代码)
自动提交后,当手机有安装支付宝的时候,在webView中实现一个协议方法即可自动跳转到支付宝客户端。如果没有安装,进入支付宝的H5收银台进行支付。协议方法如下
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSString* reqUrl = request.URL.absoluteS
if ([reqUrl hasPrefix:@"alipays://"] || [reqUrl hasPrefix:@"alipay://"]) {
BOOL bSucc = [[UIApplication sharedApplication]openURL:request.URL];
if (!bSucc) {
// 未安装支付宝 进入网页支付
return NO;
return YES;
当支付成功后,会自动跳转到return_url页面,这个页面简单展示一下支付成功信息即可。注意并不能作为交易成功的凭证。
支付成功后,除了会进入上面提到的return_url,支付宝还会异步通知notify_url,并传递详细的交易信息,支付宝会根据上面传入的异步通知地址notify_url通过POST请求的形式将支付结果作为参数通知到商户后台系统。在这个接口中实现验签和支付成功的业务逻辑代码。
上面提到的常用的支付宝网站罗列一下
新版开发文档入口
查看是否已经签约
开放平台密钥管理
调用支付宝网关接口/gateway.do
分享几个这个项目中比较好用的函数
创建订单号 很简单,月日时分秒 + 5位随机数
* Created by ZK on 17/3/22.
// 创建订单编号
function generateOrderID(){
var formatTime = function (date) {
var month = date.getMonth() + 1,
day = date.getDate(),
hour = date.getHours(),
minute = date.getMinutes(),
second = date.getSeconds();
return [month, day,hour, minute, second].map(formatNumber).join('') ;
function formatNumber(n) {
n = n.toString();
return n[1] ? n : '0' +
var nowDate = new Date(),
dateStr = formatTime(nowDate),
randomNum = Math.random()*,
oriStr = dateStr + randomNum,
orderID = oriStr.substr(0,15);
return orderID;
取得 QueryString 参数值
function getQueryStringArgs() {
var qs = (location.search.length & 0 ? location.search.substring(1) : ''),
args = {},
items = qs.length ? qs.split('&') : [],
item = null,
name = null,
value = null,
len = items.
for (i = 0; i & i ++) {
item = items[i].split('=');
name = decodeURIComponent(item[0]);
value = decodeURIComponent(item[1]);
if (name.length) {
args[name] =
另外一个比较好用的在PHP代码中插入JS代码实现弹出debug信息,如果服务器不支持write info,这招很方便。echo '&script type="text/javascript"&alert("testMsg");&/script&';
// 输出变量内容
$name = 'dev_zk';
echo '&script type="text/javascript"&alert('.$name.');&/script&';
多分享几个坑
JS 脚本中的代码最好别用ES6以上的版本,除非你用babel自动转换ES5。我就栽坑了,写的ES6脚本在 iOSVersion &=9.0 的系统中全部失效报错,但是在移动应用中测试 JS 的不方便你是知道的,找了好久才意识到这个问题。高估了WebKit对JS的版本支持更新速度。
ISV权限不足 --- 没有签约对应功能。
验签失败 --- 没有在对应APPID设置正确公钥。
- iOS & JS工程师,目前就职于互爱科技(胡莱游戏),坐标国家会议中心。
- GitHub: /dev-zhoukang
- Email: dev_

我要回帖

更多关于 如何查看支付宝appid 的文章

 

随机推荐