Post Jobs

图片滚动插件,iOS内购的订单对应和补单

__dbg.h,dbgautoattach.h

#ifndef __HSS_DBG_HSS__
#define __HSS_DBG_HSS__

/**************************************************************************************************\
*  2009-06-28

    调试信息输出的宏版

    (1) 一定起作用的宏
        __trace, __trace_file, __trace_fmt, __trace_end

    (2) 需要定义 __dbg__才有作用的宏
        __if, _if, __trace_dbg, __trace_file_dbg, __trace_fmt_dbg, __trace_end_dbg

        (宏名dbg在后面,是为了在搜索__trace的时候可以找到所有的宏)

    (3) 用法示例:

      __trace "a=%d b=%d\r\n", a, b); __trace_end

      __trace_file "a=%d b=%d\r\n", a, b); __trace_end

      //注意:这个宏有参数 ,并且在宏的参数括号的后面,不能有逗号
      __trace_fmt(__FILE__, __LINE__, TRUE) "a=%d b=%d", a, b); __trace_end

      其中__FILE__可以替换为其他文件名,若是全路径会只显示文件名

    (4) __if 是长格式版,显示条件的内容

    (5) _if 是短格式版,不显示条件的内容,仅显示条件的值


\**************************************************************************************************/
#include <shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define __trace_end    if (__sztrace && __sztrace[0])        \
                        OutputDebugStringA(__sztrace);    \
                    }

#define __trace    \
            {    \
                char __sztrace[260] = {0};    \
                _snprintf(__sztrace, sizeof(__sztrace), 

#define __trace_file    \
            {    \
                char __sztrace[260] = {0};    \
                int _n = _snprintf(__sztrace, sizeof(__sztrace)-1, "%08X %s/%d ", GetCurrentThreadId(), strrchr(__FILE__, '\\') + 1, __LINE__);    \
                _snprintf(__sztrace+_n, sizeof(__sztrace)-_n-1,

#define __trace_fmt(file, line, error)     \
            {                            \
                char __sztrace[260] = {0};    \
                int __n = 0;            \
                if (file && ((char*)file)[0])    \
                {                        \
                    LPCTSTR __p = strrchr(file, '\\');    \
                    if (__p == 0)        \
                        __p = file;        \
                    __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "%s ", __p);    \
                }                        \
                if (line)                \
                {                        \
                    __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "/%d ", line);    \
                }                        \
                if (error)                \
                {                        \
                    int se = GetLastError();    \
                    LPSTR __lpMsgbuf = 0;    \
                    if (FormatMessage(    \
                        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,    \
                        NULL,            \
                        se,            \
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),        \
                        (LPSTR) & __lpMsgbuf,    \
                        0,                \
                        NULL)            \
                        )                \
                    {                    \
                        if (__lpMsgbuf && __lpMsgbuf[0])    \
                        {                \
                            __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, "%s (%d) ", __lpMsgbuf, se);    \
                        }                \
                        if (__lpMsgbuf)    \
                        {    \
                            LocalFree( __lpMsgbuf );    \
                        }    \
                    }                    \
                }                        \
                __n += _snprintf(__sztrace+__n, sizeof(__sztrace)-1-__n, 

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//sample : __trace_bytes("profix", pData, cbData) __trace_end;
#define __trace_bytes(Profix, pData, cbData)    \
        {                                        \
            int __size = cbData * 3 + (Profix == 0 ? 0 : strlen(Profix)) + 32;    \
            char* __sztrace = (char*)alloca(__size);    \
            LPBYTE __p = (LPBYTE)pData;            \
            if (__sztrace)                        \
            {                                    \
                int __n = _snprintf(__sztrace, __size-1, "%s", Profix);    \
                for (int __l = 0 ; __l < cbData ; __l ++)    \
                {                                \
                    DWORD __d = (DWORD)__p[__l];    \
                    __n += _snprintf(__sztrace + __n, __size-1-__n, "%02X ", __d);    \
                }                                \
                __n += _snprintf(__sztrace + __n, __size-1-__n, "(%d)", cbData);    \
                __sztrace[__n] = 0;                \
                __sztrace[__size-1] = 0;        \
            }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define __FL__        __trace_file "\r\n");__trace_end;

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifdef __dbg__

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define __trace_end_dbg        __trace_end

#define __trace_dbg            __trace

#define __trace_file_dbg    __trace_file

#define __trace_fmt_dbg        __trace_fmt


/**************************************************************************************************\
 *  2009-06-28
 显示程序的分支和判断的值
 长格式:__if 显示判断的条件的文本
 短格式:_if 不显示判断的条件的文本
\**************************************************************************************************/

#define __if_false(x)        \
    {                \
        char __szif[256] = {0};    \
        if (!(x))        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d == ("#x")\r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
            OutputDebugStringA(__szif);    \
        }            \
    }                \
    if (x)

///////////////////////////////////////////////////////////////////////////////////////////////////

#define __if_true(x)        \
    {                \
        char __szif[256] = {0};    \
        if (x)        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d == ("#x")\r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
            OutputDebugStringA(__szif);    \
        }            \
    }                \
    if (x)

///////////////////////////////////////////////////////////////////////////////////////////////////

#define __if(x)        \
    {                \
        char __szif[256] = {0};    \
        if (x)        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d == ("#x")\r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
        }            \
        else        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d == ("#x")\r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
        }            \
        OutputDebugStringA(__szif);    \
    }                \
    if (x)

///////////////////////////////////////////////////////////////////////////////////////////////////

#define _if(x)        \
    {                \
        char __szif[256] = {0};    \
        if (x)        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d \r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
        }            \
        else        \
        {            \
            _snprintf(__szif, sizeof(__szif)-1, "%s/%d %d \r\n", strrchr(__FILE__, '\\') + 1, __LINE__, (x));    \
        }            \
        OutputDebugStringA(__szif);    \
    }                \
    if (x)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#else

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#define _if(x)                if(x)
#define __if(x)                if(x)
#define __if_true(x)        if(x)
#define __if_false(x)        if(x)
#define __trace_end_dbg        }
#define __trace_dbg            if (0) { (
#define __trace_file_dbg    if (0) { (
#define __trace_fmt_dbg        if (0) { (

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#endif

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#endif

#ifndef
__HSS_DBG_HSS__ #define __HSS_DBG_HSS__ /*
*************************************************************************************************\*
200…

  这里收集了12款很好用的 jQuery 图片滚动插件分享给大家。jQuery
作为最流行的 JavaScript
框架,使用简单灵活,同时还有许多优秀的插件可供使用。其中最令人印象深刻的应用之一就是各种很酷的图片效果,它可以让的网站更具吸引力。

iOS内购的订单对应和补单,ios订单对应

内购的关键类:

1.SKPayment(SKMutablePayment可将自己的参数一对一与苹果产生的payment对应起来)

2.TransactionObserver:交易状态更新时执行此方法,此方法会传入交易SKPaymentTransaction数组,对数组进行遍历,对不同状态进行对应的操作

(SKPaymentTransactionStatePurchasing,SKPaymentTransactionStatePurchased,SKPaymentTransactionStateFailed,SKPaymentTransactionStateRestored,SKPaymentTransactionStateDeferred) 

3.SKPaymentTransaction:包括transactionReceipt,payment,transactionIdentifier等关键属性,transactionReceipt是后端验签的关键。

 

内购流程1:

        SKPayment *payment = [SKPayment
paymentWithProductIdentifier:productID];//传入productID
        [[SKPaymentQueue defaultQueue]
addTransactionObserver:self];//添加observer,并执行协议,对支付状态进行更新

        //observer代理方法
         – (void)paymentQueue:(SKPaymentQueue *)queue
updatedTransactions:(NSArray *)transactions
{
    for (SKPaymentTransaction *transaction in transactions)
    {
        switch (transaction.transactionState)
        {
            case SKPaymentTransactionStatePurchased:
                //对已经支付的状态进行操作
                break;
            case SKPaymentTransactionStateFailed:
               //支付失败的操作
                break;
            case SKPaymentTransactionStateRestored:
              //对于非消耗产品的操作
                break;
            default:
                break;
        }
    }
}
如果用户已经支付,但是验签没有通过,继续支付时会产生可免费恢复的对话框,这时即使再添件payment,也都是purchasing的状态,必需将purchased状态的paymenttrananction
通过[[SKPaymentQueue defaultQueue]
finishTransaction:transaction]后才能逐个执行paymentque里面purchasing状态下的订单(这是针对同一个productIdentifier的产品),不同的productIdentifier产品仍可正常支付

 

内购的关键类:
1.SKPayment(SKMutablePayment可将自己的参数一对一与苹果产生的payment对应起来)
2.Tra…

您可能感兴趣的相关文章

  • 精心挑选的优秀jQuery Ajax分页插件和教程
  • 推荐几款很好用的 JavaScript 文件上传插件
  • 精心挑选的优秀 jQuery 文本特效插件和教程
  • 8款非常棒的响应式 jQuery 幻灯片插件推荐
  • 精心挑选12款优秀 jQuery 手风琴插件和教程

  

Slides

Slides 是一款精巧的 jQuery
幻灯片插件,有循环、自动播放功能和淡入淡出过渡效果,并且能够自动生成分页。

     效果演示

3D Image Slider

Face
Detection是一个非常不错的插件,正如它的名字一样,它用于照片的人脸检测。

     效果演示

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图